如何解决无法为“链接”创建中继容器

时间:2019-07-03 18:15:46

标签: javascript graphql-js relayjs relay

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

我该如何解决?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

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