首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Next.js更改路由而不重新加载页面

使用Next.js更改路由而不重新加载页面
EN

Stack Overflow用户
提问于 2020-06-30 04:53:17
回答 2查看 13.1K关注 0票数 3

每当用户单击“继续”按钮时,就会触发一个函数,在该函数中,我调用:

push("/signup/page-2", undefined, { shallow: true });

所有看起来像/signup/[page].js的动态路由,返回<Component />

我还有一个返回/signup/index.js<Component />

问题是:

每次调用push("/signup/page-2", undefined, { shallow: true });时,页面重新加载并清除所有状态。

还值得一提的是,这个应用程序是一个具有react路由器-dom应用的CRA,该应用被转换为一个next.js应用程序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-30 05:53:29

关于shallow-routing,你完全错了。浅路由适用于相同页面的URL,一般情况下,您将更新同一页的查询字符串参数,查询参数的更新值将通过router获得。

router.push('/signup/[page]', '/signup/page-1')将推送新的URL路径,并导航到与/signup/完全不同的页面。这就是为什么浅层路由不能在这里工作和state值重置的原因。

在页面目录中,/signup/[page].js/signup/index.js是文件系统中两个完全不同的文件。如果您尝试使用浅路由在它们之间导航,它将无法工作。

溶液

您不需要像/signup/[page]这样的其他动态路由,您可以通过查询字符串更新page参数并保持相同的URL路径。在/signup/index.js页面中,您可以获得查询参数的更新值并对其进行处理。

代码语言:javascript
运行
AI代码解释
复制
router.push({
   pathname: '/signup',
   query: {
      pageId: "page-1"  // update the query param
   }
}, undefined, { shallow: true})


// you have access to the updated value of pageId through router.query.pageId

const currPage = router.query.pageId
票数 7
EN

Stack Overflow用户

发布于 2022-02-17 08:06:43

忽略此任务的下一个路由器,只需使用JavaScript来更改URL -组件不会重新加载或受到影响。

window.history.pushState(null, 'Page Title', '/newUrl'); (null为stateData)。

例如:

您在用户配置文件页面localhost.com/john上,然后用id 13983单击他们的帖子。

代码语言:javascript
运行
AI代码解释
复制
function onPostClicked(post){
  showPost(post);
  window.history.pushState(null, 'Post by John', '/john/p/13983');
}

然后,当他们点击离开帖子时,您可以返回到原来的URL:

代码语言:javascript
运行
AI代码解释
复制
function onPostClosed(){
  hidePost();
  window.history.pushState(null, 'John', '/john');
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62657924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文