假设我在本地状态下有一个对象,并且对该对象有两种查询:-
for i in itertools.product(range(N), repeat=int(N*np.log2(N))):
...
var_dump(...$params, ...[$extraVariable]);
anObject {
__typename: "AnObject"
thisThing: ""
查询1
thatThing: ""
}
{
查询2
anObject @client
}
{
anObject @client {
thisThing
2种情况:-
一个组件正在运行查询1,但未使用anObject.thatThing中的呈现功能。
一个组件正在运行查询2(它不查询thatThing)。
现在,假设另一个组件对anObject.thatThing进行了突变。我假设方案1将导致组件重新呈现,因为它已在本地状态下通过查询1订阅了整个对象,而在方案2中,如果anObject.thatThing发生突变,则组件不会重新呈现订阅了该对象的单个(不同)片段。正确吗?
答案 0 :(得分:1)
您有错误的假设。
标准Query
不是Subscription
也不是ObservableQuery
-这是一次查询,它不会在外部更改上强制自动更新/重新获取/呈现。
您可以使用上面列出的选项或[最简单的pollInterval
选项。
要进行更深的对象更新,应使用shouldComponentUpdate
方法。
更新
@client
伪指令更改默认查询行为。来自文档:
一旦调用client.writeData,render prop函数上的查询结果将自动更新。
它看起来像是预订,但不是。在两种情况下都重新查询。子组件的渲染取决于其道具更改。如果传递的道具不变,则不会重新呈现-对于相同的查询结果或仅传递/使用未更改的结果片段(对象属性)。