如何让 Next JS 动态路由与 RelayJS 一起使用

Posted

技术标签:

【中文标题】如何让 Next JS 动态路由与 RelayJS 一起使用【英文标题】:How to get Next JS dynamic routing working with RelayJS 【发布时间】:2020-05-06 20:48:06 【问题描述】:

我正在尝试将我们的路由切换到 NextJS 的 v9 dynamic routing,移出之前的 next-routes 库。

从玩弄和查看文档来看,如果我要传入参数/slug,它似乎会强制执行某种文件结构。例如博客文章

blog
  [slug].tsx

允许我使用blog/id123 之类的路由。

我们使用 RelayJS,它也依赖于文件名。在这种情况下,所有 React 组件都必须以 FileNameQuery 的格式命名查询。这意味着我需要在我传入的变量名之后命名我的所有中继查询,这不会很好地扩展。

有没有人设法让它们一起工作得很好?

【问题讨论】:

【参考方案1】:

withData.js 在示例中with-relay-modern

if (options.query) 
  // Provide the `url` prop data in case a graphql query uses it
  // const url =  query: ctx.query, pathname: ctx.pathname 
  const variables = ctx.query
    ? Object.assign((options.variables || ), ctx.query)
    : (options.variables || )
  // const variables = options.variables ||  
  // const cacheConfig =  force: true 
  // TODO: Consider RelayQueryResponseCache
  // https://github.com/facebook/relay/issues/1687#issuecomment-302931855
  queryProps = await fetchQuery(environment, options.query, variables) // , cacheConfig
  queryRecords = environment
    .getStore()
    .getSource()
    .toJSON()

const variables = ctx.query ? Object.assign((options.variables || ), ctx.query) : (options.variables || )

【讨论】:

以上是关于如何让 Next JS 动态路由与 RelayJS 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Next.js 将静态路由与动态路由重叠

如何不在 Next.js 动态路由之间保持状态?

Next.js 动态路由错误:提供的路径 `page-name` 与页面不匹配:`/[slug]`

如何基于 GraphQL API 的 slug 使用 Next.js 进行动态路由?

Next.js:我们如何将动态路由重定向到静态页面?

Next.js-express 动态路由导致页面重新加载