从中继容器中强制获取特定片段

forceFetch a specific fragment from a Relay container

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

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

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

虽然强制抓取 'as is' 可以完成工作,但 Relay 的全部意义在于避免 over/under 抓取。

有什么建议吗?

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

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 为您想要的任何内容执行临时查询。有关详细信息,请参阅

旁白:

the whole point of Relay is to avoid over/under fetching

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