刷新页面时 nextJS SSR useRouter() 不起作用

Nit*_*iya 2 server-side-rendering next.js dynamic-routing next-router

我在我的项目中使用 nextJS SSR。现在,当我尝试使用以下代码获取页面参数时,它显示未定义。

 function About() {
  const router = useRouter();
  const { plan_id } = router.query;
  console.log(plan_id)
 }
 export default About;
Run Code Online (Sandbox Code Playgroud)

当页面从其他页面路由时(没有使用“下一个/链接”重新加载页面)时它可以工作,但是当我刷新页面时它不起作用。有人可以帮忙吗?

Ama*_*waj 7

 function About({plan_id}) {
  console.log(plan_id)
 }

 // this function only runs on the server by Next.js
 export const getServerSideProps = async ({params}) => {
    const plan_id = params.plan_id;
    return {
       props: { plan_id }
    }
 }

 export default About;
Run Code Online (Sandbox Code Playgroud)

  • 鉴于 Next.js 也是一个静态站点生成器,它生成纯粹在客户端运行的站点,因此说“在服务器端进行”并不是最有帮助的答案。 (2认同)

Nit*_*iya 6

我自己找到了答案。实际上,当您刷新页面时,路由器不会立即初始化。所以你可以在 UseEffect 钩子下添加它,如下所示,你将能够获得参数

function About() {

 const [param1, setParam1]=useState("");
 const router = useRouter();

 useEffect(() => {
  if (router && router.query) {
   console.log(router.query);
   setParam1(router.query.param1);
  }
 }, [router]);
}
Run Code Online (Sandbox Code Playgroud)

当此路由器参数更改时,它将调用可用于检索值的“UseEffect”。