在 electron.js 中使用 apollo 客户端时的重复请求

Duplicate requests when using apollo client in electron.js

提问人:Marek Kostruski 提问时间:11/10/2023 更新时间:11/10/2023 访问量:21

问:

在 electron.js 中,我有具有两个 useQuery 钩子的基本组件。当组件重新渲染时,钩子会触发,并且应该在网络选项卡中产生 2 次调用。但是,有 3 个或有时 4 个请求。看起来 apollo 缓存不起作用。如果移除一个钩子并多次触发另一个钩子,则只有一个网络请求,缓存工作正常。 此问题出现在 dev 和 prod 中 - 安装软件包后

组件:

'const 测试 = () => { console.log('渲染....');

useGetUserQuery({
    variables: {
        id: 'SE',
    },
});

useTagsQuery();

return null;

};`

传递给包装 Test 组件的 ApolloProvider 的客户端

'export const useClient = () => { const authToken = sessionStorage.getItem('token');

const httpLink = createHttpLink({
    uri: 'https://api',
});

const authLink = setContext((_, { headers }) => {
    return {
        headers: {
            ...headers,
            authorization: authToken ? `Bearer ${authToken}` : '',
        },
    };
});

return {
    client: new ApolloClient({
        link: authLink.concat(httpLink),
        cache: new InMemoryCache(),
    }),
};

};`

不确定这是否有任何价值,但两个查询响应具有相同的父__typename但除此之外完全不同。

当我在 Apollo Devtools 中预览“缓存”选项卡时,只有ROOT_QUERY,它只存储来自我的测试组件的两个查询中的第一个。

到目前为止,我已经尝试过: 反应 16 和 18 删除严格模式 将ApolloClinet评级降至3.3 更改提取和重新提取策略 我已经尝试了在这里找到的所有解决方案

我希望每个钩子都有一个调用

谢谢

graphql 电子 react-apollo

评论

0赞 phry 11/10/2023
你的钩子在每次调用时都会创建一个新的 ApolloClient。您是否 100% 确定该组件永远不会重新渲染?useClient
0赞 Marek Kostruski 11/10/2023
已经找到了罪魁祸首,那就是架构以及它如何使用命名空间。在这里被描述 stackoverflow.com/questions/63746078/...我只是找错了地方。

答: 暂无答案