我了解阿波罗更喜欢在渲染方法中使用<Query>
而不是this.props.client.query()
来进行查询。
我创建的每个新类都从<Query>
组件开始(以保持最佳实践),但是100%的时间最终将其删除并只在{{ 1}},否则基本上所有其他类方法都是无用的,因为它无法访问所需的任何数据。
是否故意从this.props.client.query()
组件获得的任何东西只能在componentWillMount
中使用?
仅依靠<Query>
完全是反模式吗?如果是这样,我是否应该创建一个另一个组件放入我的render()
内,以使诸如this.props.client.query()
之类的东西不会变得毫无用处?
为所有问题表示歉意,我很惊讶从未见过这个问题。
答案 0 :(得分:0)
不使用client.query
的主要原因 是因为它没有观察到缓存中的更改。如果信息在缓存中进行了更新(例如,在发生突变后),则除非重新安装,否则组件中呈现的数据将不会更新。
如果您有一个类组件,并且正在使用Query
组件,并且需要提供的数据可用于render
之外的方法,那么是的,您需要两个组件,以便数据可以作为道具传递。这有效地迫使您使用container/presenter pattern。
或者您也可以使用graphql
HOC来达到相同的效果。
但是...从3.0版开始,render-prop组件和HOC均为deprecated。因此,就“最佳做法”而言,您可能想migrate使用功能组件并始终使用钩子。