我有一个动态的网页与动态网址。一切都是客户端呈现。
这是链接到第二页的link
<Link
href= {{ pathname: '/dashboard/[orderdetail]', query: { id: `${orderID}` } }} as={`/dashboard/${orderDetails.orderNo}`}
</Link>
这很好的将每个查询都带到第二个页面,但是当我刷新第二个页面时,所有内容都丢失了,我传递的每个查询都丢失了
我试过用with/Router
let orderID=this.props.router.query.orderdetail;
仍然在页面刷新一切都丢失了。
我需要传递到第二页的query string
来调用一个工作正常的数据库。但是,当我刷新页面时,什么都不工作。
当页面刷新时,我如何避免这种损失。
3条答案
按热度按时间ldxq2e6h1#
最后我最终采用了这个解决方案,这里没有区别
但是在第二页中添加这个以某种方式保持路由查询。
我不知道这是如何解决这个问题的,但它确实解决了这个问题。考虑到我只想要客户端渲染,我认为不会有太大的区别
9w11ddsr2#
看起来您对使用的查询参数有些混淆。
使用示例中的
href
URL对象,生成的完整href URL将是:所以
router.query
将包含一个order
键和一个id
键,但没有orderdetail
。order
键将被设置为具有给定as
属性的orderDetails.orderNo
的内容,但id
将不会被设置,因为as
没有?id=xxx
部分。假设你的JS文件名是
/pages/dashboard/[order].js
,你的${orderDetails.orderNo}可以作为this.props.router.query.order
访问,并且id
查询字符串永远不会被使用。问题中的
this.props.router.query.orderdetail
永远不会被设置为任何值,因为请求没有这样的参数名。如果文件名是
/pages/dashboard/[orderdetail].js
,则需要相应的gjmwrych3#
我遇到了同样的问题,并通过使用纯JS访问查询字符串值来修复它。当使用
getServerSideProps
时,Next将为每个传入的请求在服务器端生成页面。为了避免这种服务器端延迟,添加useEffect()
钩子来访问window
对象并从那里检索查询字符串。要访问不同的查询字符串值,只需更改
urlParms.get("id")
以使用您要查找的查询字符串变量的名称。我更喜欢这种解决方案,因为我希望在客户端保留此功能,并避免向服务器添加不必要的内容。这也很酷,因为您可以避免使用useRouter()
钩子。