Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphql 查询局部状态变量不需要';不要立即返回结果_Graphql_React Apollo_Apollo Client - Fatal编程技术网

Graphql 查询局部状态变量不需要';不要立即返回结果

Graphql 查询局部状态变量不需要';不要立即返回结果,graphql,react-apollo,apollo-client,Graphql,React Apollo,Apollo Client,我正在查询我的局部变量isLeftSidebarOpen,我认为它应该立即返回结果,而不必加载状态isLeftSidebarOpen在创建客户端时初始化 const data = { isLeftSidebarOpen: false, }; const initializeCache = cache => { cache.writeData({ data }); }; 结果是: undefined true { isLeftSidebarOpen: false } fal

我正在查询我的局部变量isLeftSidebarOpen,我认为它应该立即返回结果,而不必加载状态<代码>isLeftSidebarOpen在创建
客户端
时初始化

const data = {
    isLeftSidebarOpen: false,
};
const initializeCache = cache => {
    cache.writeData({ data });
};
结果是:

undefined
true
{ isLeftSidebarOpen: false }
false
鉴于我希望:

{ isLeftSidebarOpen: false }
false

我的理解有什么问题?

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

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


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

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

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

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

 const { data, loading } = useQuery(IS_LEFTSIDEBAR_OPEN);
 console.log(data);
 console.log(loading);
undefined
true
{ isLeftSidebarOpen: false }
false
{ isLeftSidebarOpen: false }
false