我有一个非常简单的应用程序,具有列表视图和详细视图。列表视图包含一个graphql查询,该查询映射到包含项目数组的data
prop。选择一个项目实例化一个细节视图,其中该项目的id用于为该项目组合另一个graphql查询。React/Apollo共享查询状态
const ListView = graphql(ALL_ITEMS, ...)(ListViewComponent);
<ListView data={ [....] }>
<Detail>
<Next /> <Prev /> {/* <-- need info from ListView.data */}
</Detail>
{ this.props.data.map(....) }
</ListView>
我遇到的麻烦是将上一个/下一个导航添加到该详细视图。细节组件不知道data
prop中包含ListView
组件中所有项目的内容。在一个典型的redux应用程序中,我将这些项存储为全局应用程序状态,并将它们注入到组件中将是微不足道的,但是Apollo似乎并没有这样工作。其状态树不是非常消耗品(例如使用connect()
)。
我看到一些可能的解决方案这一点,他们都不大:
- 包裹上/下一个导航组件与graphql查询,查找
currentOffset + 1
和currentOffset -1
。这绝对是最“apollo”的解决方案,但问题在于currentOffset
对于该组件是未知的,因为它没有data
支柱。此外,我将不得不确保列表视图查询中的任何其他变量(例如过滤器,排序)都已通过,并且这些变量也位于不明确的apollo
状态树中。 - 收听我的reducer中的
APOLLO_QUERY_RESULT
操作,并使用其他组件需要的所有信息维护查询结果的第二个副本。 - 使用
context
共享data
道具给儿童。 - 明确地通过
data
道具给儿童。
似乎是一种常见的情况。什么是正确的方法?