如何在 Nextjs 中渲染任何东西之前初始化路由器?
How to initialize router before rendering anything in Nextjs?
我正在使用 react-query,当我从 url 获取 id 并尝试在 getSubject 中调用它时,它传递了一个未定义的值 http://localhost:3000/api/subject/undefined
但是当我从另一个组件单击 link 进入该主题组件时,它可以工作,但如果刷新页面,它就不起作用。
const router = useRouter()
const { id } = router.query
const { data } = useQuery('subjects', async () => await getSubject(id))
return value...
}
在这种情况下,您应该使用 getServerSideProps
。它可以访问查询参数。最重要的是你 can prefetch data on the server side too.
export interface PageProps {
id: string;
}
export function Page({ id }: PageProps ) {
const { data } = useQuery('subjects', async () => await getSubject(id))
}
export const getServerSideProps: GetServerSideProps<PageProps > = async ({
params,
}) => {
const { id } = params;
return {
props: {
id,
},
};
};
如果你还想使用路由器,你可以等待router.isReady
标志。当它是 true
时,应该解析查询参数。
我正在使用 react-query,当我从 url 获取 id 并尝试在 getSubject 中调用它时,它传递了一个未定义的值 http://localhost:3000/api/subject/undefined
但是当我从另一个组件单击 link 进入该主题组件时,它可以工作,但如果刷新页面,它就不起作用。
const router = useRouter()
const { id } = router.query
const { data } = useQuery('subjects', async () => await getSubject(id))
return value...
}
在这种情况下,您应该使用 getServerSideProps
。它可以访问查询参数。最重要的是你 can prefetch data on the server side too.
export interface PageProps {
id: string;
}
export function Page({ id }: PageProps ) {
const { data } = useQuery('subjects', async () => await getSubject(id))
}
export const getServerSideProps: GetServerSideProps<PageProps > = async ({
params,
}) => {
const { id } = params;
return {
props: {
id,
},
};
};
如果你还想使用路由器,你可以等待router.isReady
标志。当它是 true
时,应该解析查询参数。