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

How does fragment composition work in Relay?

让我们使用 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')},
    },
  },
  ....
}

它实际上 "declared" text 两次(也在 Todo 组件中声明)并且循环运行完美。

我的问题是,为什么无法从组合中取回 "properties",即使它们是由 Graphql Server 返回的?

感谢 #relay 频道的 hueyp#7485。

他指出这是设计使然的行为。

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