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
不是 Subscription
或 ObservableQuery
- 它是一次性查询,不会强制自动 update/refetch/render 进行外部更改。
您可以使用上面列出的选项或[最简单的] pollInterval
选项。
对于更深层次的对象更新,您应该使用 shouldComponentUpdate
方法。
更新
@client
指令更改默认查询行为。来自文档:
Once you call client.writeData, the query result on the render prop function will automatically update.
它可能看起来像订阅,但实际上不是。 在这两种情况下都会重新获取查询。子组件的重新渲染取决于它的道具变化。如果传递的道具不会改变,则不会重新呈现 - 对于相同的查询结果或 passing/using 只有未更改的结果片段(对象属性)。
假设我在本地状态下有一个对象,并且对该对象有两种类型的查询:-
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
不是 Subscription
或 ObservableQuery
- 它是一次性查询,不会强制自动 update/refetch/render 进行外部更改。
您可以使用上面列出的选项或[最简单的] pollInterval
选项。
对于更深层次的对象更新,您应该使用 shouldComponentUpdate
方法。
更新
@client
指令更改默认查询行为。来自文档:
Once you call client.writeData, the query result on the render prop function will automatically update.
它可能看起来像订阅,但实际上不是。 在这两种情况下都会重新获取查询。子组件的重新渲染取决于它的道具变化。如果传递的道具不会改变,则不会重新呈现 - 对于相同的查询结果或 passing/using 只有未更改的结果片段(对象属性)。