为什么Apollo缓存(?)writeQuery()重新呈现查询组件

时间:2019-05-15 20:36:50

标签: reactjs typescript apollo react-apollo apollo-client

我正在使用Apollo Client进行React项目,并且正在进行cache.writeQuery()调用,这导致相关查询组件的重新呈现。

有关详情,请参见代码:

  

cache.writeQuery():

cache.writeQuery( {
    query : serverQueries.searchMessages,
    variables : {
        labelId : labelId,
        searchTerms : searchTermsString ? searchTermsString : null,
        )
    },

    data : { Messages : updatedData }
} );
  

正在重新呈现的相关查询组件:

<SearchMessagesQuery
            query={serverQueries.searchMessages}
            variables={{
                labelId: searchMailLabelId,
                searchTerms: searchTerms.asJSON,
            }}>

我不希望此查询组件重新呈现,并且根据我的阅读,看来cache.writeData()允许该行为。但是,cache.writeData()显然不允许我需要更新唯一/单独variable的{​​{1}}键。如何使用searchMessages来执行相同的查询?

1 个答案:

答案 0 :(得分:0)

cache.writeData()用于更新单个项目(按类型)的用法here

但是...我很害怕它也会强制重新渲染查询组件。此行为来自<Query/>组件内部-创建一个可观察的/订阅:

  

Apollo客户程序为我们的查询创建一个可观察的对象。我们的组件通过Apollo客户端缓存订阅查询结果。

建议: 您可以使用 old graphql() HOC来避免使用cache.writeQuery()重新呈现。我个人更喜欢使用更灵活/功能更强大的recompose pattern(例如,用于组成多个查询,变异,局部状态,还原connect())的HOC。