中继。访问兄弟组件的数据

时间:2016-02-18 08:06:42

标签: relayjs

使用继电器我遇到了访问数据的问题。我试图用Relay项目的官方Todo示例重现这些问题。请考虑要点以改变Todo的例子。 here

以下是问题:

  1. 为什么Summary组件无法访问兄弟(查看器)组件数据?
  2. "查询的原因必须只有一个字段"?我相信GraphQL并没有这样的限制。
  3. 为什么我遇到不变违规:中继(TodoApp).getFragment():summary不是有效的片段名称?
  4. 提前致谢!

1 个答案:

答案 0 :(得分:0)

  1. 无论Summary想要在查看器中使用什么数据,都必须在Summary容器中声明为GraphQL,并一直编写到应用程序的根目录。

    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没有要求它。

  2. 您可以在Summary中拥有多个查询,但每个查询只能有一个根字段。我们需要这种一对一的对应关系,以便我们知道将哪个结果分配给哪个道具。

    Relay.Route
  3. 您需要将摘要片段一直编写到应用程序的根目录,使其在class MyRoute extends Relay.Route { queries: { summary: () => Relay.QL`query { summary }`, viewer: () => Relay.QL`query { viewer }`, }, /* ... */ } 上可用。

    TodoApp