我正在查询局部变量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
我的理解有什么问题?
答案 0 :(得分:2)
本地解析器接口必须是异步的,因为apollo客户端可能根本不知道您是否将异步实现本地解析器。异步在两种情况下均有效,而同步则不可行。即使您的实现本身是同步的,apollo也会在将await
设置为false之前loading
使用该功能。
另一个“好处”是您的查询的行为完全相同,无论它是在本地还是在远程解决。
但是,cache.readQuery
是一个同步操作,因此,如果您遇到了缓存命中,则可以使用它代替使用本地解析器立即返回数据。