Next.js에서는 error.js 파일을 통해서 중첩된 라우트에서 발생하는 예기치 못한 런타임 오류를 처리 할 수 있음
클라이언트 컴포넌트에서는 처리할 방법이 많기 때문에 서버에서 다루는 방법에 대해 작성해보자.
각 경로에서 에러가 발생하면 해당 경로에 생성된 error.tsx가 자동 렌더링
"use client";
import { useRouter } from "next/navigation";
import { startTransition } from "react";
export default function Error({
error,
reset,
}: {
error: Error & { digest?: string };
reset: () => void;
}) {
const { refresh } = useRouter();
return (
<div>
<h2>에러가 발생했습니다</h2>
<h2>{error.message}</h2>
<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>
);
}
global-error.tsx가 필요한 이유