Next/13/Remove Get Static Props
The following data fetching methods are no longer available in the app
directory:
getStaticPaths
,getServerSideProps
,getStaticProps
.
The codemod migrates the data fetching functions into the supported in the app
directory:
getStaticPaths
->generateStaticParams
getServerSideProps
->getData
getStaticProps
->getData
(used in the component)
If the getStaticPaths
function has only one expression in the return statement, it will be inlined within the nextData
function, otherwise it will remain unchanged.
When migrating the getServerSideProps
functions, the codemod assumes that only the params
property of the first argument is used.
It additionally adds types for aforementioned params
and page props.
It will also add the revalidate
and dynamicParams
route segment properties.
Example
Before
import PostLayout from '@/components/post-layout';export async function getStaticPaths() {return {paths: [{ params: { id: '1' } }, { params: { id: '2' } }],fallback: 'blocking',};}export async function getStaticProps({ params }) {const res = await fetch(`https://.../posts/${params.id}`);const post = await res.json();return { props: { post } };}export default function Post({ post }) {return <PostLayout post={post} />;}
After
import { notFound, redirect } from 'next/navigation';import PostLayout from '@/components/post-layout';type Params = {[key: string]: string | string[] | undefined,};type PageProps = {params: Params,};export async function getStaticPaths() {return {paths: [{ params: { id: '1' } }, { params: { id: '2' } }],fallback: 'blocking',};}export async function generateStaticParams() {return (await getStaticPaths({})).paths;}export async function getStaticProps({ params }) {const res = await fetch(`https://.../posts/${params.id}`);const post = await res.json();return { props: { post } };}async function getData({ params }: { params: Params }) {const result = await getStaticProps({ params });if ('redirect' in result) {redirect(result.redirect.destination);}if ('notFound' in result) {notFound();}return 'props' in result ? result.props : {};}export default async function Post({ params }: PageProps) {const { post } = await getData({ params });return <PostLayout post={post} />;}export const dynamicParams = true;
Build custom codemods
Use AI-powered codemod studio and automate undifferentiated tasks for yourself, colleagues or the community