1

如果一个容器有多个片段,我怎么能forceFetch只有其中一个?

Relay.createContainer(MyContainerComponent, {
    fragments: {
        fragment1: () => Relay.QL`my first fragment`,
        fragment2: () => Relay.QL`my second fragment`
    } 
});

根据文档,调用this.props.relay.forceFetch()将更新与容器关联的每个片段。

虽然“按原样”强制获取完成了这项工作,但 Relay 的全部意义在于避免过度/不足获取。

有什么建议吗?

4

1 回答 1

0

重新获取由容器管理,因此一种解决方案是:

Relay.createContainer(MyContainerComponent, {
    fragments: {
        fragment1: () => Relay.QL`fragment on SomeThing { ${SomeThingContainer.getFragment("something")}`,
        fragment2: () => Relay.QL`fragment on OtherThing { ${OtherThingContainer.getFragment("otherthing")}`
    } 
});

然后只需使用两个子容器重新获取它们各自的片段。

如果您确实需要来自两个片段的数据,MyContainerComponent因此您无法将它们分成子容器,那么重新获取完整的容器片段对我来说很有意义......

但是,如果您确实需要来自两个片段的数据并且您真的只想重新获取其中一个片段,那么您始终可以使用命令式 Store API 来执行任何您想要的临时查询。有关详细信息,请参阅此问题

在旁边:

Relay 的重点是避免过度/不足

我不同意......这当然是一个受欢迎的好处,但真正的“重点”是成为一个将数据获取到组件的声明性框架。确实没有用于重新获取单个容器片段的简单的声明性 API。也许应该有!但我认为您可能更有可能在这里过早地进行优化:)

于 2016-07-07T20:07:26.413 回答