使用Relay我遇到了访问数据的问题 . 我试图用Relay项目的官方Todo示例重现这些问题 . 请考虑要点以改变Todo的例子 . here
以下是问题:
为什么Summary组件无法访问兄弟(查看器)组件数据?
"queries must have exactly one field"是什么原因?我相信GraphQL没有这样的限制 .
为什么我有不变违规:Relay(TodoApp).getFragment(): summary 不是有效的片段名称?
summary
提前致谢!
Summary
class Summary extends React.Component { render() { return <span>{this.props.viewer.bar}</span>; } } export default Relay.createContainer(Summary, { fragments: { viewer: () => Relay.QL` fragment on Viewer { bar } `, }, }); class TodoApp extends React.Component { render() { return <Summary viewer={this.props.viewer} />; } } export default Relay.createContainer(TodoApp, { fragments: { viewer: () => Relay.QL` fragment on Viewer { foo ${Summary.getFragment('viewer')} } `, }, });
请注意, foo 字段在 Summary 中不可用 . 我们掩盖了它,因为 Summary 没有要求它 .
foo
Relay.Route
class MyRoute extends Relay.Route { queries: { summary: () => Relay.QL`query { summary }`, viewer: () => Relay.QL`query { viewer }`, }, /* ... */ }
TodoApp
export default Relay.createContainer(TodoApp, { fragments: { summary: () => Relay.QL` fragment on Summary { ${Summary.getFragment('summary')} } `, }, });
1 回答
Summary
想要在查看器中使用什么数据,都必须在Summary
容器中将其作为GraphQL声明,并一直编写到应用程序的根目录 .请注意,
foo
字段在Summary
中不可用 . 我们掩盖了它,因为Summary
没有要求它 .Relay.Route
中有多个查询,但每个查询只能有一个根字段 . 我们需要这种一对一的对应关系,以便我们知道将哪个结果分配给哪个道具 .TodoApp
上可用 .