我正在开发一个电子商务商店使用NEXT.JS
和Redux
.所以在产品列表页面,我有排序选择下拉菜单与Price Low to High
,Price High to Low
和New Arrivals
.选择此选项后,我想改变没有页面刷新和API调用的URL应该发生.我已经尝试使用下面的代码,但它不工作,页面正在重新加载.
function sortBy(value) {
router.replace({
pathname: '/products/'+slug,
query: { sort: value }
})
dispatch(fetchproducts(slug, sort));
}
上面的代码只是刷新当前页面,并将sort
参数附加到URL。
那么,是否可以像Flipkart
那样在不刷新页面的情况下完成它呢?
3条答案
按热度按时间kulphzqa1#
在
shallow-routing
的帮助下,可以在不重新加载页面的情况下更改URL。可以通过将显式选项对象作为第三个参数传递给Router.push
来启用,即{ shallow: true }
从docs
浅路由允许您更改URL,而无需再次运行数据获取方法,包括
getServerSideProps
、getStaticProps
和getInitialProps
。您将通过
router
对象(由useRouter
或withRouter
添加)接收更新的pathname
和query
,而不会丢失状态。例如,这就是如何在
shallow-routing
的帮助下更新路径名/products
的查询参数sortBy
。但有一些注意事项不可能在不同页面之间执行
shallow-routing
,它只适用于相同页面的URL更改。有关更多详细信息,请参阅注意事项部分。例如,您可以更新页面
/product
的查询参数,但如果您尝试将shallow-routing
从/product
更新为/product/[slug]
,则无法更新,因为它们是两个不同的页面。n53p2ov02#
例如:你有一个类似于以下的文件夹:posts/[id].js,你的url就像http://something.com/posts/123
你想添加一个不会刷新页面的查询参数,你的URL将像这样:http://something.com/posts/123?param=ok
你需要做的就是:
zpqajqem3#
这对我很有效。它比
useRouter
更容易,但选项更少。给了我一个锚链接,这是我所需要的。在NextJS docs中阅读更多我的[category].js在
useEffect
hook中有一个fetch
调用,路由器获取URL参数,进行调用,并填充数据。