为什么我们需要根查询?

Why do we need a root query?

QueryRenderer 接受一个“query”prop,其中包含由下游组件的片段组成的应用程序的最顶层查询:

const LinkListPage = () => (<QueryRenderer
  query={ rootQuery }
  { ...otherProps }
  render={
    (error, props) =>
      <LinkList viewer={ props.viewer } />
  }
/>)

/* ... */

const rootQuery = graphql`
  query LinkListPageQuery {
    viewer {
      ...LinkList_viewer
    }
  }
`

在上面的例子中,片段“LinkList_viewer”是自给自足的,它告诉我们它向哪个容器提供数据,它填充了哪个prop。

为什么中继编译器不 assemble 自己查询根?为什么我们需要重复输入 props.viewer,当什么传递到哪里是显而易见且明确的?手动构造根查询是否有帮助我们的情况?

query 用于区分请求幂等数据 (query) 和请求会改变状态 (mutations) 的数据其他方式 (subscriptions).

我认为 Relay 库的哲学是不要尝试在使用它的实现中有太多的魔力,因此缺乏在只有一个节点的查询中自动传递数据。