forceFetch Relay容器中的特定片段

时间:2016-06-27 21:18:01

标签: reactjs graphql relayjs relay

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

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

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

虽然强行取力'做到这一点,继电器的重点是避免过度/不足。

有什么建议吗?

1 个答案:

答案 0 :(得分: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来执行广告-hoc查询你想要的任何东西。有关详细信息,请参阅this question

ASIDE:

  

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

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