为什么我们需要root查询?

时间:2018-01-20 04:41:34

标签: relayjs relay

QueryRenderer采用“查询”道具,其中包含由下游组件的片段组成的应用程序的最顶层查询:

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

/* ... */

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

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

为什么中继编译器不能自己组装根查询?为什么我们需要重复props.viewer的输入,当它立即显而易见且毫不含糊地传递到哪里?在手动构建根查询对我们有帮助的情况下是否有任何情况?

1 个答案:

答案 0 :(得分:1)

query用于区分对幂等(query)数据的请求与要求状态(mutations)变异的数据与其他方式的数据的区别(subscriptions)。

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