로딩,에러,404페이지 만들기
08 May 2023 | nextjsNext.js에서
<Link>
등으로 페이지 이동시 새로고침이아니라 꼭 필요한 부분만 바뀌도록 세팅되어있다.
loading.js
리액트에서
<Suspense fallback={<h4>loading../</h4>}>
이거랑 똑같은 역할을 해준다.
Next.js에선 loading.js 파일에 적으면 자동으로 Suspense 기능을해준다.
page.js 옆에 loading.js라는 이름으로 파일을 만들면 page.js 로드전에 loading.js안의 내용을 미리 보여준다.
Ex) loading.js, 컴포넌트 만들고 그 안에 로딩중에 보여줄 UI를 넣어주면된다.
참고로 client component로도 사용가능하다.
// loading.js
export default function Loading() {
return <h4>Loading...</h4>;
}
경로는 /app/loading.js 이렇게 파일을 넣어줘도된다.
page.js옆에 loading.js 파일이없으면 상위폴더로 이동하면서 loading.js를 찾는다. 그러면서 가장 가까운 loading.js파일을 찾아서 적용해준다.
error.js
loading.js와 마찬가지로 page.js옆에 error.js파일을 만들어주면된다.
Ex)
error.js;
('use client');
export default function Error({ error, reset }) {
return (
<div>
<h4>Error 페이지 예시</h4>
<button
onClick={() => {
reset();
}}
>
다시시도
</button>
</div>
);
}
몇가지 참고사항이 있다.
- client component로만 작성가능하다.
- error라는 props출력해보면 에러내용을 알려준다.
- reset라는 props를 () 붙여서 실행하면 해당 페이지를 다시 로드해준다.
경로는 /app/error.js 이렇게 파일을 넣어줘도된다.
page.js옆에 error.js 파일이없으면 상위폴더로 이동하면서 error.js를 찾는다. 그러면서 가장 가까운 error.js파일을 찾아서 적용해준다.
not-found.js
없는 URL로 접속하는 유저에게 보여주는 페이지다.
Next.js에선 자동으로 404 page not found페이지를 보여주기때문에 직접 만들 필요는 없다
Ex)
not - found.js;
export default function NotFound() {
return <h4>404 에러페이지</h4>;
}
- not-found.js 파일을 page.js 옆에 만들어두고 404페이지를 꾸며준다.
import { notFound } from 'next/navigation';
export default async function Detail(props) {
const db = (await connectDB).db('forum');
let result = await db
.collection('post')
.findOne({ _id: new ObjectId(props.params.id) });
if (result == null) {
return notFound();
} else {
return 상세페이지;
}
}
- 특정 상황에서 404페이지를 보여주고 싶은 경우
notFound()
라는 함수를 실행시켜준다. - page.js대신 not-found.js를 보여주게된다.
- 계속 상위폴더로 찾아가면서 가장 가까운 not-found.js를 보여주려고 하기때문에 app폴더에 not-found.js 하나만 만들어놔도 쉽게 404페이지를 보여줄 수 있다.