1. 개발 개요
cursor ai에 익숙해지기 위해 사이드 프로젝트의 일환으로 블로그를 만들던 중 Next.js로 프론트엔드를 구성했는데 아래와 같은 에러를 보았다. 보아하니 블로그 상세 페이지 즉, id를 params로 받아오는 곳의 타입 문제가 발생했는데 예전에 Next.js를 사용할 때와 동일한 코드와 로직이였는데 pwa 도입 후 테스트를 위해 build 하던 도중 발생한 에러였다.
한 번도 본 적이 없던 에러라 구글링을 해보니 Next.js 15버전부터 params와 searchParams의 접근 방식이 바뀌었다고 한다.
Type error: Type '{ params: { id: string; }; }' does not satisfy the constraint 'PageProps'.
Types of property 'params' are incompatible.
Type '{ id: string; }' is missing the following properties from type 'Promise<any>': then, catch, finally, [Symbol.toStringTag]
32 |
33 | // Check the prop type of the entry function
> 34 | checkFields<Diff<PageProps, FirstArg<TEntry['default']>, 'default'>>()
| ^
35 |
36 | // Check the arguments and return type of the generateMetadata function
37 | if ('generateMetadata' in entry) {
Linting and checking validity of types . ELIFECYCLE Command failed with exit code 1.
2. 기존 코드
export default async function BlogPost({ params }: { params: {id : string } }) {
const post = getPost(params.id)
...
}
기존에 params에 접근하기 위한 코드는 위와 같았다. params의 id 값을 받아와서 해당 게시글을 불러오는 구조인데 이와 같이 하니 위와 같은 에러 코드가 뜨는 것이다. 에러를 잘 보아하니 Promise<any>가 누락되었다는 점이다.
3. Next.js 15 버전 이후 업데이트 사항
1) Next.js 15 버전 이후 params, searchParams 는 비동기 방식으로 변경이 되었다. 그동안은 동기 방식으로 접근했으나 15 버전 이후는 async / await 등을 통해 비동기 방식으로 가져와야 한다.
4. 업데이트 코드
export default async function BlogPost({ params }: { params: Promise<{ id: string }> }) {
const post = getPost((await params).id)
...
}
위와 같이 비동기 방식으로 가지고 오니 문제가 해결이 되었다.
리액트만 다루다 Next.js를 오랜만에 다루니 실수 했나 했던 문제였는데 새롭게 업데이트된 부분이여서 업데이트도 지속적으로 따라가야함을 배웠다.
출처 : https://velog.io/@hyewonny2327/nextjs15params
NEXT.JS 15 에서 Params 접근하기
Error: A param property was accessed directly with params.평소처럼 개발하다가 뜬금없이 이런 오류를 마주하신 분 계실까요 ?Next.js 15에서는 params와 searchParams에 접근하는 방식이 변경되었습니다.
velog.io
'FrontEnd Skils' 카테고리의 다른 글
[Frontend] 블로그 개발 일지 (1) - monorepo 도입 (2) | 2024.12.22 |
---|---|
Chart 라이브러리 (1) - Plotly.js (0) | 2024.07.05 |
Front-end 배포 (3) - 개발용과 실제 서비스용 배포 분리하기 (1) | 2024.07.01 |
Front-End 배포 (2) - Github Actions로 CI/CD 구축해보기 (0) | 2024.04.04 |
Front-End 배포 (1) - AWS S3 + CloudFront (1) | 2024.04.04 |