7️날씨 데이터 조회하기
Last updated
NEXT_PUBLIC_API_KEY=3d9284ea92f14f078ca75a17232817const API_KEY = process.env.NEXT_PUBLIC_API_KEY
const apiPath = `http://api.weatherapi.com/v1/current.json?key=${API_KEY}`
const res = await fetch(apiPath)'use client' // 에러 컴포넌트는 클라이언트 컴포넌트로 정의되어야 합니다.
import { useEffect } from 'react'
export default function Error({
error,
reset,
}: {
error: Error
reset: () => void
}) {
useEffect(() => {
// 에러 로그를 남기면 디버깅에 도움이 되겠죠.
console.error(error)
}, [error])
return (
<div>
<h2></h2>
<button onClick={() => reset()}>
재시도
</button>
</div>
)
}export default function Loading() {
return <h2>로딩 중</h2>
}import { revalidateTag } from 'next/cache'
import { NextRequest, NextResponse } from 'next/server'
export async function POST(req: NextRequest) {
const tag = req.nextUrl.searchParams.get('tag')
if (!tag) throw new Error('태그는 필수 값입니다')
revalidateTag(tag)
return NextResponse.json({ message: '재검증에 성공했습니다', tag })
}export const revalidateByTag = async (tag: string) => {
const baseUrl = location.origin
const res = await fetch(`${baseUrl}/api/revalidate?tag=${tag}`, {
method: 'POST',
cache: 'no-cache',
})
if (!res.ok) throw new Error('재검증에 실패했습니다')
return res.json()
}'use client'
import { revalidateByTag } from '@/api/revalidate-by-tag'
const RevalidateButton = () => {
const handleClick = async () => {
await revalidateByTag('tag')
}
return <button onClick={handleClick}>캐시 비우기</button>
}
export default RevalidateButton