reactjs - 如何在 NextJS 中向 Router.push 添加查询参数?

标签 reactjs next.js

使用 NextJS,我尝试使用具有 toas 字段的对象路由到另一个页面:

export const routes = {
  'BrowseList' : {
    'to' : '/apps/Browse/list',
    'as' : '/browse/list'
  }
  // ....
}

然后像这样导入和使用:
import { routes } from './__routes';
import Router from 'next/router';

// .... 

const { to, as } = routes.BrowseList;

Router.push(to, as);

这一切都有效。我的困境是我试图在附加查询参数时做类似的事情。我正在尝试根据 docs 遵循此示例:
Router.push({
  pathname: '/about',
  query: { name: 'Zeit' },
})

我尝试过的(不起作用):
Router.push({
  pathname : to,
  as,
  query    : { user_id: this.props.data.member.user.id },
});

这给了我一个控制台警告
Unknown key passed via urlObject into url.format: as

我知道我也许可以只使用字符串插值并执行以下操作:
Router.push(to, `${as}?user_id=`${this.props.data.member.user.id}`)

但我想知道文档示例中是否缺少我将查询参数添加到我的 as 值中的内容。

谢谢你。

最佳答案

你很亲近@nyphur。 as 值作为 push 的第二个参数,而不是在对应于 to 的对象内部(检查 router.d.ts 以了解 push 是如何定义的)。这就是您收到错误 Unknown key passed via urlObject into url.format: as 的原因。从您的问题提出 10 个月后,也许这对寻找答案的人仍然有用。假设您有办法为 as 参数构建查询字符串,请遵循@Gezim 回答或通过任何其他方法:

Router.push({ pathname: to, query: { user_id: this.props.data.member.user.id } }, as, options);
注意: 基于@Gezim 的回答,如果您在第一个参数中格式化字符串或 pathname 以包含您的查询参数,它将起作用,但编码值(如果有),例如 %2B 将被解码,因此您将获得 + .如果查询 params 对象进入 query ,则不会发生这种情况。如果您有任何依赖于此的逻辑,请考虑这一点。

关于reactjs - 如何在 NextJS 中向 Router.push 添加查询参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58306983/

相关文章:

ajax - 知道axios中是否有待处理的请求

javascript - 与 CRA 相比,Next.js 如何改进 SEO?

next.js - React Query 在 nextjs 中更改路由时重新获取数据

javascript - Now.sh 构建因 : Support for the experimental syntax 'decorators-legacy' isn't currently enabled 而中断

javascript - NextJS API |应用程序在部署和开发模式下工作,但在我运行下一次构建时却不行 |被拒绝

javascript - 如何在 Reactjs 中循环返回复杂的 JSON?

javascript - 使用 React 将数据动态映射到表(无键)

javascript - 有没有办法将 ReadableStream<Uint8Array> 通过管道传输到 NextApiResponse?

amazon-web-services - aws amplify 可以与 NextJS 配合使用吗?

javascript - 未捕获( promise 中)TypeError : _this2. context.router.push 不是函数