【问题标题】:Querying for a local state variable doesn't immediately return a result查询局部状态变量不会立即返回结果
【发布时间】:2019-11-19 18:49:22
【问题描述】:

我正在查询我的局部变量isLeftSidebarOpen,我认为它应该立即返回没有loading 状态的结果。 isLeftSidebarOpen 在创建ApolloClient 时被初始化。

const data = {
    isLeftSidebarOpen: false,
};
const initializeCache = cache => {
    cache.writeData({ data });
};
const cache = new InMemoryCache();

const client = new ApolloClient({
    link: new HttpLink({
        uri: 'http://localhost:4000/graphql',
        credentials: 'include',
    }),
    cache,
    resolvers,
});

initializeCache(cache);
 query IsLeftSidebarOpen {
   isLeftSidebarOpen @client
 }
 const { data, loading } = useQuery(IS_LEFTSIDEBAR_OPEN);
 console.log(data);
 console.log(loading);

结果是:

undefined
true
{ isLeftSidebarOpen: false }
false

而我期望是:

{ isLeftSidebarOpen: false }
false

我的理解有什么问题?

【问题讨论】:

    标签: graphql react-apollo apollo-client


    【解决方案1】:

    本地解析器接口必须是异步的,因为 apollo 客户端根本不知道您是否会异步实现本地解析器。异步在这两种情况下都有效,而同步则不行。即使您的实现本身是同步的,apollo 也会在将 loading 设置为 false 之前 await 该函数。

    另一个“好处”是您的查询行为完全相同,无论是在本地还是远程解决。

    但是,cache.readQuery 是一个同步操作,因此您可以使用它而不是使用本地解析器来立即返回数据,因为您会遇到缓存命中。

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多