如何修复无法为“链接”创建中继容器

Posted

技术标签:

【中文标题】如何修复无法为“链接”创建中继容器【英文标题】:How can I fix Could not create Relay Container for `Link` 【发布时间】:2019-11-14 11:37:52 【问题描述】:

我尝试关注 the tutorial 关于 GraphQL 和 Relay。

当我运行它时(或运行yarn test):

Invariant Violation: Could not create Relay Container for `Link`. Expected a set of GraphQL fragments, got `function () 
      const node = require("./__generated__/Link_link.graphql");

      if (node.hash && node.hash !== "4db5e0eb9875bd761c8f8ef68ea507f3") 
        console.error("The definition of 'Link_link' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data.");
      

      return require("./__generated__/Link_link.graphql");
    ` instead.

      16 | 
      17 |
    > 18 | export default createFragmentContainer(Link, graphql`
         |                ^
      19 |     fragment Link_link on Link 
      20 |         id
      21 |         description

      at invariant (node_modules/fbjs/lib/invariant.js:40:15)

我尝试修改graphql.schema:

type Link implements Node 
  id: ID!
  description: String!
  url: String!

匹配

export default createFragmentContainer(Link, graphql`
    fragment Link_link on Link 
        id
        description
        url
    
`)

但我收到同样的错误。我还尝试删除__generated__ 文件夹并重新运行relay-compiler,但没有成功。

我该如何解决?

【问题讨论】:

【参考方案1】:

升级到v4.0.0 时我遇到了类似的问题。似乎他们已经删除了对传递 graphql 文字作为第二个参数的支持,所以你应该传递一个像

这样的对象
export default createFragmentContainer(Link, 
  link: graphql`
    fragment Link_link on Link 
      id
      description
      url
    
  `
)

这很烦人,但它应该可以工作。我希望他们在以后的版本中解决这个问题。

【讨论】:

【参考方案2】:

这是对hisa_py's的补充回答:

export default createFragmentContainer(ModuleName, 
  moduleName: graphql`                             // LINE 2
    fragment Link_link on Link 
      id
      description
      url
    
  `
)

注意只有第 2 行的第一个字符是小写的。

【讨论】:

以上是关于如何修复无法为“链接”创建中继容器的主要内容,如果未能解决你的问题,请参考以下文章

中继片段变量

中继器中的 ACF 链接无法正常工作

无法创建中继容器; graphql.js 文件似乎有 webpack 工件?

如何修复无法点击的子菜单?

Docker容器无法读取http链接 - 驼峰

无法将 mysql docker 容器与 Spring Boot 应用程序链接 - 通信链接失败