【发布时间】:2021-02-23 02:51:41
【问题描述】:
我正在制作一个只有两页的简单 Next Js 应用程序..
index.tsx:
import React from "react";
import Link from "next/link";
export default function Index() {
return (
<div>
<Link
href={{
pathname: "/about",
query: { candidateId: 8432 }
}}
as="about"
>
Go to the about page
</Link>
</div>
);
}
根据上面的代码,点击Go to the about page会转到关于页面,使用query我也会在关于页面中收到传递的查询值。
about.tsx
import React from "react";
import Router, { withRouter } from "next/router";
function About({ router: { query } }: any) {
return (
<div>
Candidate Id: <b> {query.candidateId} </b>
</div>
);
}
export default withRouter(About);
这会显示值,但是当我们在 /about 页面时刷新页面时,收到的 candidateId 会消失。
要求:请帮助我保留从一个页面传递到另一个页面的查询值,即使在页面刷新时也是如此。
注意:根据我的要求,我不应该在导航时在 url 上显示canidateId,因此我使用as 方法。我知道如果我删除@987654334,我可以实现它@ 但我无法在导航时在索引页面中删除它。原因是这将导致在 url 中显示不想要的候选 ID ..
尝试了这个解决方案:https://stackoverflow.com/a/62974489/7785337 但这会在页面刷新时提供 empty query 对象。
困扰了很长时间,请帮助我。
【问题讨论】:
-
AFAIK,“路由状态”是相当短暂的,它真的只存在于在路由转换期间。重新加载页面不会重新加载过渡。我认为您需要将传递的数据保存到 localStorage 或任何可用的数据,在页面加载/重新加载后可以访问。
-
@DrewReese,感谢您的评论,我认为其他一些人也面临同样的问题,例如stackoverflow.com/questions/61891845/…,并且建议的解决方案对我不起作用.. 如果您能帮助我,请用您的解决方案分叉我的代码框并将其发布为答案.. 我只是请求您是否可以这样做.. 因为我以与您不同的方式看待事物,并且我从您那里学到了很多东西.. 如果您愿意,请帮助我可以..谢谢..
-
@DrewReese,兄弟你能帮我吗stackoverflow.com/questions/65504354/…?
-
@DrewReese,在这种情况下我们可以使用 React 上下文 API 吗?
-
看起来 TJ 在这方面做得很好。我不反对他在那里说的任何话。在没有看到你的实际代码的情况下,完全基于他的话和我对 react-metrics 文档的检查,我会说,是的,React Context API 可能会在这里提供帮助,尽管看起来 react-metrics 可能已经有自己的上下文和提供者.
标签: javascript reactjs next.js server-side-rendering