首页 > 解决方案 > 正确的使用模式在其他类方法中

问题描述

我了解 Apollo 更喜欢我们<Query>在渲染方法中使用来进行查询,而不是this.props.client.query().

我创建的每个新类,我都从<Query>组件开始(以保持最佳实践),但是 100% 的时间最终会删除它并只是this.props.client.query()在 my中执行componentWillMount,否则基本上所有其他类方法都是无用的,因为它不能访问它需要的任何数据。

是否故意从<Query>组件中获得的任何东西都只能在 中使用render()

几乎完全依赖this.props.client.query()是反模式吗?如果是这样,我是否应该创建另一个组件来放入我的内部<Query>,以免诸如此类的东西componentDidUpdate变得无用?

对所有问题表示歉意,我很惊讶我之前没有看到过这个问题。

标签: reactjsapolloreact-apolloapollo-client

解决方案


使用的主要原因client.query是它不会观察缓存的变化。如果信息在缓存中更新(例如,在发生突变之后),除非重新挂载,否则组件中呈现的数据将不会更新。

如果您有一个类组件,并且您正在使用该Query组件,并且您需要提供的数据可用于 之外的方法render,那么是的,您需要有两个组件,以便可以将数据作为道具传递下去。这有效地迫使您使用容器/演示者模式

或者你可以使用graphqlHOC 来达到同样的效果。

但是……从 3.0 版开始,render-prop 组件和 HOC 都已弃用。因此,就“最佳实践”而言,您可能无论如何都希望迁移到使用功能组件和挂钩。


推荐阅读