【发布时间】:2018-08-24 18:23:35
【问题描述】:
所以我将 Apollo 用于我的应用程序状态,到目前为止,我有点吃惊,没有与 mapStateToProps 等价的东西。
据我所知,要在我的商店中全局访问任何数据,一旦我获得数据,我需要一个查询来将数据写入商店,然后在我的另一个组件中进行另一个查询来获取它。
此时,其他组件已经安装和渲染了很多,所以内容只是有点闪烁。
在 Redux 中,我可以将新数据添加到我的 reducer 中的存储区,然后任何与 mapStateToProps 连接的东西都可以访问它。
有没有等价物?还是一切都需要经过异步查询?有没有其他人觉得这是一种巨大的痛苦?
例如,在一个组件中,我得到了一些邀请数据:
this.props.client.query({
query: REQUEST_ACTION_DATA,
variables: {
id: actionData.id,
type: actionData.type
}
}).then(data => {
this.props.client.writeQuery({query: GET_ACTION_DATA, data: {
action: {
type: data.data.actionData.type,
object: data.data.actionData.invitation,
__typename: 'ActionDataPayload'
}
}})
this.props.history.push('/auth/register')
})
...然后在我的其他组件中我有这个:
componentWillMount() {
const authToken = localStorage.getItem(AUTH_TOKEN);
if (authToken) {
this.props.history.push('/')
}else{
this.props.client.query({
query: GET_ACTION_DATA
}).then(data => {
if(data.data && data.data.action && data.data.action.type == 'invite'){
this.setState({
invitation: data.data.action.object
})
}
console.log(data)
})
}
}
忽略为如此简单的事情编写所有这些非常笨拙的事实,是否有一种无需等待即可访问存储数据的方法?
【问题讨论】:
-
好吧,使用
withApollo高阶组件并不是使用 Apollo 的方式。你想使用graphqlHOC(一个增压的 reduxconnect)或Query组件,除非你正在做一些非常特别的事情(我们有一个大型生产应用程序并且从不使用withApollo,这是一种反模式)。这是一个关于如何做非常特别的事情的问题,还是我应该尝试解释 Apollo 缓存的工作原理(以及如何从中选择数据)? -
嘿@Herku,非常感谢您的回复。我没有做任何特别的事情,真的。只是传递客户端状态。我在几个组件中使用
compose和graphql HOC,但它似乎只是withApollo 的更详细用法。如果您有时间,了解一下两者之间的区别会非常有用!
标签: reactjs graphql react-apollo