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

apollographql - changes to entries in objects in local state & re-rendering?

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

anObject {

__typename: "AnObject"

thisThing: ""

thatThing: "" }

查询 1

{

anObject @client

}

查询 2

{

anObject @client {

thisThing }

}

2 个场景:-

一个组件是 运行 查询 1 但在它的渲染函数中没有使用 anObject.thatThing。

一个组件是 运行 查询 2(不查询 thatThing)。

现在,假设另一个组件发生了变异 anObject.thatThing。我假设场景 1 会导致组件重新渲染,因为它订阅了本地状态中的整个对象(通过查询 1),而在场景 2 中,如果 anObject.thatThing 发生突变,组件将不会重新渲染仅订阅该对象的单个(不同)片段。对吗?

你的假设有误。

标准 Query 不是 SubscriptionObservableQuery - 它是一次性查询,不会强制自动 update/refetch/render 进行外部更改。

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

对于更深层次的对象更新,您应该使用 shouldComponentUpdate 方法。


更新

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

Once you call client.writeData, the query result on the render prop function will automatically update.

它可能看起来像订阅,但实际上不是。 在这两种情况下都会重新获取查询。子组件的重新渲染取决于它的道具变化。如果传递的道具不会改变,则不会重新呈现 - 对于相同的查询结果或 passing/using 只有未更改的结果片段(对象属性)。