
// app/product/[productId]/reviews/[reviewId]/page.js
import { notFound } from "next/navigation";
function getRandomInt(count) {
return Math.floor(Math.random() * count)
}
export default function ReviewDetail({ params }) {
const random = getRandomInt(2)
if (random === 1) {
throw new Error("Error loading review");
}
if (parseInt(params.reviewId) > 1000) {
notFound();
}
return (
<h1> {params.reviewId}th Review for product {params.productId}</h1>
)
}
// app/product/[productId]/reviews/[reviewId]/error.js
'use client'
export default function ErrorBoundary({error}) {
return <div>{error.message}</div>
}
해당 라우트 세그먼트에 랜덤으로 에러가 발생하는 상황을 발생시킨 뒤 error.js에 에러 메시지가 출력되는 커스텀 에러 페이지를 만들게 되면

에러 발생 안할 경우

에러 발생한 경우
와 같이 error.js가 출력되게 된다.
// .../error.js
'use client'
export default function ErrorBoundary({error, reset}) {
return <div>
{error.message}
<button onClick={reset}> Try again</button>
</div>
}
// .../page.js
'use client'
import { notFound } from "next/navigation";
function getRandomInt(count) {
return Math.floor(Math.random() * count)
}
export default function ReviewDetail({ params }) {
const random = getRandomInt(2)
if (random === 1) {
throw new Error("Error loading review");
}
if (parseInt(params.reviewId) > 1000) {
notFound();
}
return (
<h1> {params.reviewId}th Review for product {params.productId}</h1>
)
}
이와 같이 error.js의 ErrorBoundary의 reset기능을 활용해 간단하게 기존의 페이지를 리렌더링 할 수 있음(설정해둔 확률로 에러 발생)