Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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_Apollo_React Apollo_Apollo Client - Fatal编程技术网

Graphql 阿波罗分解器打了两次电话?

Graphql 阿波罗分解器打了两次电话?,graphql,apollo,react-apollo,apollo-client,Graphql,Apollo,React Apollo,Apollo Client,我使用Apollo查询组件。当数据从解析器返回时,我将其存储在组件状态,例如: if (loading) { return (<></>); } else { setMyData(data.myData); } 但是,由于setMyData会导致刷新,因此查询组件会重新运行查询 存储数据以响应组件状态而不重新运行查询的最佳做法是什么?理想情况下,因为查询结果已经是全局状态,所以根本不应该这样做。但是,您可以: 将skip:myData参数传递给查询,以防

我使用Apollo查询组件。当数据从解析器返回时,我将其存储在组件状态,例如:

if (loading) {
    return (<></>);
} else {
    setMyData(data.myData);
}
但是,由于setMyData会导致刷新,因此查询组件会重新运行查询


存储数据以响应组件状态而不重新运行查询的最佳做法是什么?

理想情况下,因为查询结果已经是全局状态,所以根本不应该这样做。但是,您可以:

将skip:myData参数传递给查询,以防止查询在状态已设置时运行。 在装载时仅触发一次查询。假设您使用的是钩子,那么可以使用useffect在挂载时运行代码,然后使用client.query启动查询,并在它返回的承诺解析时设置状态。