Next.js에서는 error.js 파일을 통해서 중첩된 라우트에서 발생하는 예기치 못한 런타임 오류를 처리 할 수 있음
클라이언트 컴포넌트에서는 처리할 방법이 많기 때문에 서버에서 다루는 방법에 대해 작성해보자.
"use client";
import { notFound, useRouter } from "next/navigation";
import { startTransition } from "react";
export default function GlobalError({
error,
reset,
}: {
error: Error;
reset: () => void;
}) {
const { refresh } = useRouter();
alert(error.message);
return (
<div>
{"Default Error Page"}
<button
onClick={() =>
startTransition(() => {
refresh();
reset();
})
}>
Try again
</button>
</div>
);
}
useRouter()와 startTransition()을 꼭 포함시키기
사용하지 않으면 버튼을 클릭해도 새로고침이 되지 않음
refresh() : 강제 새로고침
startTransition() : 상태 업데이트가 긴급하지 않은 경우, 해당 업데이트를 낮은 우선순위 작업으로 처리(ui 응답성 개선)
전역 에러를 처리하기 위한 컴포넌트
'use client';
export default function GlobalError({
error,
reset,
}: {
error: Error & { digest?: string }
reset: () => void
}) {
return (
<html>
<body>
<h2>Something went wrong!</h2>
<button onClick={() => reset()}>Try again</button>
</body>
</html>
);
}