apollographql-在本地状态下更改对象中的条目并重新渲染?

时间:2019-03-31 15:48:44

标签: reactjs apollo react-apollo apollo-client

假设我在本地状态下有一个对象,并且对该对象有两种查询:-

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发生突变,则组件不会重新呈现订阅了该对象的单个(不同)片段。正确吗?

1 个答案:

答案 0 :(得分:1)

您有错误的假设。

标准Query不是Subscription也不是ObservableQuery-这是一次查询,它不会在外部更改上强制自动更新/重新获取/呈现。

您可以使用上面列出的选项或[最简单的pollInterval选项。

要进行更深的对象更新,应使用shouldComponentUpdate方法。


更新

@client伪指令更改默认查询行为。来自文档:

  

一旦调用client.writeData,render prop函数上的查询结果将自动更新。

它看起来像是预订,但不是。在两种情况下都重新查询。子组件的渲染取决于其道具更改。如果传递的道具不变,则不会重新呈现-对于相同的查询结果或仅传递/使用未更改的结果片段(对象属性)。