片段组合在 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
让我们使用 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