将nextjs
与next-routes
配合使用时,在页面之间导航时是否可以保留URL的查询字符串?我有一个广告活动正在运行,我需要在浏览页面时保留它,以便进行历史原因和跟踪。
我不能把它塞进Redux商店,或者localhost,sessionstorage等,它必须留在URL中。
我尝试了以下方法:
import { Router } from 'routes';
Router.events.on('routeChangeStart', (url: string) => {
if (Router.query && Router.router.pathname !== url) {
const href = `${url}${Object.keys(Router.query).reduce(
(carry: string, key: string) => {
carry += `${carry === '' ? '?' : '&'}${key}=${Router.query[key]}`;
return carry;
},'')}`;
Router.pushRoute(href, Router.router.pathname, { shallow: true });
}
});
字符串routes.js
文件导出next-routes
:
const nextRoutes = require('next-routes');
const routes = (module.exports = nextRoutes());
型
这里发生的情况是,URL被正确推送,查询字符串持续存在,但只是短暂的 Flink 。它立即将原始url
推回Router,我失去了查询字符串参数。
我已经尝试了其他几种变体,但不幸的是,我找不到正确的实现。
任何帮助都是感激不尽的。
5条答案
按热度按时间0qx6xfy61#
经过一番搜索,我设法得到了我想要的结果,如下所示:
字符串
然后,我将使用我新创建的方法重定向到另一个带有所需查询字符串的页面:
型
最后是
QueryStringHelper
:型
w3nuxt5m2#
个字符
pjngdqdw3#
帮助我们的是URL和URLSearchParams API。
我们创建了一些小方法,在使用
router.push
时使用它们,这里是一个更改路由但持久化查询参数的示例:字符串
w8ntj3qf4#
对于那些使用NextJS 13+和新的App路由器的人,你可以创建一个自定义钩子来 Package 标准的rooter钩子。下面是我是如何做到的:
字符串
iqjalb3h5#
我从URL中获取查询字符串,并将其长传递到我使用组件的任何地方。
字符串
一个在链接中使用它的例子。
型
我做同样的事情,我的外部链接,使我的广告活动的作品。