查询局部状态变量不会立即 return 结果

Querying for a local state variable doesn't immediately return a result

我正在查询我的局部变量 isLeftSidebarOpen,我认为它应该立即 return 结果没有 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

我的理解有什么问题吗?

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

另一个 "benefit" 是您的查询行为完全相同,无论它是在本地还是远程解析。

但是,cache.readQuery 是一个同步操作,因此您可以使用同步操作而不是使用本地解析器立即 return 数据,前提是您获得了缓存命中。