从中继容器中强制获取特定片段
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 来重新获取单个容器片段,这是真的。也许应该有!但我认为您在这里过早优化的可能性更大:)
如果一个容器有多个分片,我怎么才能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 来重新获取单个容器片段,这是真的。也许应该有!但我认为您在这里过早优化的可能性更大:)