片段组合在 Relay 中是如何工作的?

Posted

技术标签:

【中文标题】片段组合在 Relay 中是如何工作的?【英文标题】:How does fragment composition work in Relay? 【发布时间】:2016-06-02 18:35:56 【问题描述】:

让我们使用 TODO 示例。在TodoList它(第81行)有一个片段组成为

todos(status: $status, first: $limit) 
  edges 
    node 
      id,
      $Todo.getFragment('todo'),
    ,
  ,
  ....

现在如果我添加一个循环

this.props.viewer.todos.edges.map(edge =>
console.log(edge.node.text)
);

在第 30 行调用 renderTodos(),它会输出 undefined

有趣的是,如果我们将 text 添加到片段中,如下所示

todos(status: $status, first: $limit) 
  edges 
    node 
      id,
      text,
      $Todo.getFragment('todo'),
    ,
  ,
  ....

它实际上“声明”了两次文本(也在 Todo 组件中声明)并且循环完美运行。

我的问题是,为什么即使 Graphql 服务器返回的“属性”也无法从组合中取回?

【问题讨论】:

【参考方案1】:

感谢 #relay 频道的 hueyp#7485。

他指出这是有意设计的行为。

https://facebook.github.io/relay/docs/thinking-in-relay.html#data-masking

【讨论】:

以上是关于片段组合在 Relay 中是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

如何从一组中继容器中组合片段?

append() 在这个代码片段中是如何工作的?与特定变量混淆[重复]

组合在 Hibernate 中是如何工作的?

从外部存储中检索 Relay 查询片段的变量

使用 Relay 和 React-Native 时的条件片段或嵌入的根容器

如何将 Relay 变量设置为枚举值?