완강을 위해 다 들어야겠다.
Next 15에서 달라진 점
- 공식문서로 역시나 제공해준다..
https://nextjs.org/docs/app/building-your-application/upgrading/version-15
Upgrading: Version 15 | Next.js
Upgrade your Next.js Application from Version 14 to 15.
nextjs.org
여기서 Breaking Change는 크게 바뀐 부분이라는 뜻이니 잘 살펴보자.
바뀐 점
1. headers, cookies, params, searchParams 와 같은 Request data는 asynchronous 되었다.
import { cookies } from 'next/headers'
// Before
const cookieStore = cookies()
const token = cookieStore.get('token')
// After
const cookieStore = await cookies()
const token = cookieStore.get('token')
// Before
type Params = { slug: string }
export function generateMetadata({ params }: { params: Params }) {
const { slug } = params
}
// After
type Params = Promise<{ slug: string }>
export async function generateMetadata({ params }: { params: Params }) {
const { slug } = await params
}
그리고 클라이언트 컴포넌트에서 사용할 때에는 React.use()를 사용해야 한다.
이말인 즉, Next 15를 사용할 땐 React 19 버전과 함께 사용해야한다는 의미!!
React.use: 프로미스를 처리해서 값을 얻어낼 수 있는 Hook
'use client'
// Before
type Params = { slug: string }
type SearchParams = { [key: string]: string | string[] | undefined }
export default function Page({
params,
searchParams,
}: {
params: Params
searchParams: SearchParams
}) {
const { slug } = params
const { query } = searchParams
}
// After
import { use } from 'react'
type Params = Promise<{ slug: string }>
type SearchParams = Promise<{ [key: string]: string | string[] | undefined }>
export default function Page(props: {
params: Params
searchParams: SearchParams
}) {
const params = use(props.params)
const searchParams = use(props.searchParams)
const slug = params.slug
const query = searchParams.query
}
2. 캐싱
2-1. API Route에서 GET은 기본적으로 캐싱이 됐었다.
근데 그 기본 캐싱이 풀리고, 필요 시에만 캐싱을 적용하게 변경되었다.
그래서 캐싱을 적용하려면 export const dynamic = 'force-static' 을 명시적으로 추가해야 한다.
default 옵션을 바꾸다니..
앞으로 명시적으로 옵션을 적어줘야 하나보다!!
2-2. Client Router Cache도 기본 30초였는데 없어졌다.
기존에 사용하던 캐싱을 그대로 적용하려면 config 파일을 수정하라고 한다.
2-3. fetch의 cache 기본 옵션이 force-cache에서 no-store로 바뀌었다.
따라서 fetch 사용하면서 캐싱 적용하려면 옵션에 cache: force-cache 라고 명시해야 한다.
3. React 19 버전 적극 사용
Next 15는 React 19와 함께 사용되기 때문에 React 19에 새로 추가된 기능을 자유롭게 쓰자-!
4. after (Hook)
서버 컴포넌트 에서 화면 렌더링 후 부가적인 작업을 처리해야 할 때 사용하면 된다.
(예: 구글 애널리틱스에 데이터 전송, 로깅 작업)
import { after } from 'next/server'
// Custom logging function
import { log } from '@/app/utils'
export default function Layout({ children }: { children: React.ReactNode }) {
after(() => {
// Execute after the layout is rendered and sent to the user
log()
})
return <>{children}</>
}
5. Form 컴포넌트 추가
https://nextjs.org/docs/app/api-reference/components/form
Components: <Form> | Next.js
Learn how to use the `<Form>` component to handle form submissions and search params updates with client-side navigation.
nextjs.org
기존에 자주 사용했던 형태
<form action={function} /> (보통 POST 요청에 쓰임)
String Action Form
<Form action='/search' /> --> GET 요청 시 사용가능
- 보통 form 태그 사용해서 submit 하면 페이지가 새로고침 되는데, e.preventDefault()를 통해 막아주었다. Form 태그는 이를 자동으로 처리해준다.
- 그리고 action=에 써주었던 이동할 페이지를 prefetch 한다. (다음으로 넘어갈 페이지를 미리 다운로드 받아둔다.) 잠깐의 렉이 사라진다. (좀 더 자연스러운 UI)
<input name="q" /> --> "keyword"라고 입력했다면
페이지가 /search?q=keyword 로 이동하게 된다.
검색 페이지에서 사용하면 될 것 같다!!
6. next.config.ts 지원
NextConfig 타입을 사용할 수 있다.
import type { NextConfig } from 'next'
const nextConfig: NextConfig = {
/* config options here */
}
export default nextConfig
그 외에 마이너한 것들도 수정된게 있다.
@next/codemod 사용하면 15로 마이그레이션을 편하게 할 수 있도록 도와준다고 한다.
하지만 충돌도 좀 있을 수 있기 때문에
충돌난 부분은 자체 수리 해야함!
완강!!
'개발 > Next.js' 카테고리의 다른 글
[Next 14] 섹션 6 (마지막) (1) | 2024.12.23 |
---|---|
[Next 14] 섹션 5 (1) | 2024.12.09 |
[Next 14] 4. MSW, React-Query, react-intersection-observer (2) | 2024.11.25 |
[Next 14] 3. CSS, Next Hooks, ContextAPI, 외부 라이브러리(faker, dayjs) (2) | 2024.11.11 |
[Next 14] 2. 라우팅, 레이아웃, 페이지, CSS Module (5) | 2024.10.28 |