Apollo解析器称为两次?

时间:2019-09-12 08:08:10

标签: graphql apollo react-apollo apollo-client

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

if (loading) {
    return (<></>);
} else {
    setMyData(data.myData);
}

但是,由于setMyData导致刷新,因此查询组件会重新运行查询。

在不重新运行查询的情况下将数据存储到React组件状态的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

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

  • skip: myData参数传递给查询,以防止在状态已设置的情况下运行。
  • 在挂载时仅触发一次查询。假设您使用的是钩子,则可以使用useEffect在挂载上运行代码,然后使用client.query触发查询并设置Promise返回的状态解析时的状态。