如何修复无法为 `Link` 创建中继容器

How can I fix Could not create Relay Container for `Link`

我尝试关注 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 但没有成功。

我该如何解决?

我在升级到 v4.0.0 时遇到了类似的问题。似乎他们已经取消了对将 graphql 文字作为第二个参数传递的支持,因此您应该传递一个像

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

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

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

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

请注意第 2 行 第一个字符如何小写。