我刚开始使用react-apollo,并想知道跨组件共享数据的最佳方式是什么。
例如,我componentA
使用grapql
react-apollo
来获取一些数据(WrappedA
)。我还有一些其他组件componentB
,在我的UI中的其他位置,并且想要使用componentA
已经提取的数据。
附上一个非常简单的例子。
const ComponentA = ({ ...props }) => (
<div>
ComponentA...
id: {props.organisationsData.organisations.id}
</div>
)
const ComponentB = ({ ...props }) => (
<div>
****** Want to access props.organisationsData *****
ComponentB...
</div>
)
const organisationsQuery = gql`
query organisations {
organisations {
id
name
}
}
`
const WrappedA = graphql(organisationsQuery, { name: 'organisationsData' })(WrappedA)
const Container = ({ ...props }) => (
<div>
<WrappedA />
<ComponentB />
</div>
)
根据apollo文档(https://www.apollographql.com/docs/react/basics/setup.html#in-your-ui),理想情况下,查询与UI组件相关联。
我可以使用相同的componentB
包装organisationsQuery
,它将使用缓存,但我无法将查询共同定位到我的主UI部分。我找不到任何与跨组件共享数据相关的信息。
当我尝试
时const WrappedB = graphql(gql`
query organisations {
organisations {
id
}
}
`, { name: 'organisationsData' })(WrappedB)
(省略name
)我看到了对graphql端点的额外调用。
这不太理想。
访问已从服务器获取的数据的最佳方法是什么? (使用v2所以不能使用现有的redux存储,手动访问缓存似乎很低,并且网站上没有提到这个用例:https://www.apollographql.com/docs/react/basics/caching.html)
谢谢。
答案 0 :(得分:2)
你可以使用apollo链接,这是本地状态管理,你可以阅读文档
apollo-link-state允许您将本地数据与远程数据一起存储在Apollo缓存中。要访问本地数据,只需使用GraphQL查询即可。您甚至可以在同一查询中请求本地和服务器数据!
https://www.apollographql.com/docs/react/essentials/local-state.html