为什么 Apollo 缓存(?)writeQuery() 会重新渲染一个查询组件
Why does Apollo cache (?) writeQuery() re render a query component
我正在使用 Apollo Client 开发一个 React 项目,并且有一个 cache.writeQuery()
调用导致相关查询组件的重新呈现。
详情见代码:
cache.writeQuery():
cache.writeQuery( {
query : serverQueries.searchMessages,
variables : {
labelId : labelId,
searchTerms : searchTermsString ? searchTermsString : null,
)
},
data : { Messages : updatedData }
} );
Related query component that is re rendering:
<SearchMessagesQuery
query={serverQueries.searchMessages}
variables={{
labelId: searchMailLabelId,
searchTerms: searchTerms.asJSON,
}}>
我不希望此查询组件重新呈现,从我读到的内容来看,似乎 cache.writeData()
允许这种行为。但是,cache.writeData()
显然不允许 variable
密钥,我需要更新 unique/individual searchMessages
。如何使用 cache.writeData()
来执行相同的查询?
cache.writeData()
描述了更新单个项目(按类型)的用法 here
但是...恐怕它也会强制重新呈现查询组件。此行为来自 <Query/>
组件内部 - 创建一个 observable/subscription:
Apollo Client creates an observable for our query. Our component subscribes to the result of the query via the Apollo Client cache.
建议:
您可以使用 old graphql()
HOC 来避免使用 cache.writeQuery()
重新渲染。我个人更喜欢使用更多 flexible/powerfull recompose pattern(f.e。用于组合多个查询、突变、本地状态、redux connect()
)的 HOC。
我正在使用 Apollo Client 开发一个 React 项目,并且有一个 cache.writeQuery()
调用导致相关查询组件的重新呈现。
详情见代码:
cache.writeQuery():
cache.writeQuery( {
query : serverQueries.searchMessages,
variables : {
labelId : labelId,
searchTerms : searchTermsString ? searchTermsString : null,
)
},
data : { Messages : updatedData }
} );
Related query component that is re rendering:
<SearchMessagesQuery
query={serverQueries.searchMessages}
variables={{
labelId: searchMailLabelId,
searchTerms: searchTerms.asJSON,
}}>
我不希望此查询组件重新呈现,从我读到的内容来看,似乎 cache.writeData()
允许这种行为。但是,cache.writeData()
显然不允许 variable
密钥,我需要更新 unique/individual searchMessages
。如何使用 cache.writeData()
来执行相同的查询?
cache.writeData()
描述了更新单个项目(按类型)的用法 here
但是...恐怕它也会强制重新呈现查询组件。此行为来自 <Query/>
组件内部 - 创建一个 observable/subscription:
Apollo Client creates an observable for our query. Our component subscribes to the result of the query via the Apollo Client cache.
建议:
您可以使用 old graphql()
HOC 来避免使用 cache.writeQuery()
重新渲染。我个人更喜欢使用更多 flexible/powerfull recompose pattern(f.e。用于组合多个查询、突变、本地状态、redux connect()
)的 HOC。