查询局部状态变量不会立即 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 数据,前提是您获得了缓存命中。
我正在查询我的局部变量 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 数据,前提是您获得了缓存命中。