首页 > 解决方案 > Apollo GraphQL:预取数据,但查询命中服务器而不是从缓存加载?

问题描述

我有这个在元素悬停时调用的例程:

function prefetchDataOnHover(event){
    const messsageID = event.currentTarget.id;
    if ((Meteor.userId()) && (!prefetched_IMs)){
        client.query({
            query: INSTANTMESSAGES_QUERY,
            variables: {"fromID": Meteor.userId(), "toID": messsageID}
        });
        setPrefetched_IMs(true);
    }
}

它预取了我的即时消息组件使用的数据。在那个组件中,我有一个<Query>组件:

<Query query={INSTANTMESSAGES_QUERY}
       variables={{"fromID": Meteor.userId(), "toID": remoteUserID}}> //<==confirmed same values as in pre-fetch
    {({subscribeToMore, loading, error, data, refetch}) => {
        if (loading) {
            [.....]

我已经确认发送到 INSTANTMESSAGES_QUERY 的变量在两个地方都是相同的。我希望该组件会从缓存中检索数据。但相反,我的服务器解析器运行并检索数据。

我错过了什么?

标签: apolloreact-apolloapollo-client

解决方案


看起来只是因为我refetch在预加载的组件中使用。


推荐阅读