如何在 react-apollo 中等待多个 useLazyQuery

Posted

技术标签:

【中文标题】如何在 react-apollo 中等待多个 useLazyQuery【英文标题】:How to wait for multiple useLazyQuery in react-apollo 【发布时间】:2021-09-26 14:24:57 【问题描述】:

我有一个gql 查询MY_Q 并有一个数据项列表,例如data_list = [data1, data2]

如何在每个数据项上对多个useLazyQuery()进行分组,并等待所有查询完成后再处理数据。

类似于Promise.all()

例子:-

Promise.all (data_list.map((e) => useLazyQuery(MY_Q ,  variables :  data : 
e))).then ((res) 
 //process result.
)

【问题讨论】:

使用client.query,而不是钩子...***.com/search?q=%5Bapollo%5D+client.query 【参考方案1】:

我不会使用 Promise,因为你会想要你的 React 组件中的钩子返回什么,不是吗?

只需为每个单独的查询定义挂钩,然后根据目前返回的内容进行渲染。获取所有内容后,如果没有,则在组件中呈现加载视图。


function SomeComponent () 
  const [fetchInitial, data, fetchMore] = useLazyQuery(QUERY, 
    variables: 
      dataSets: [
        dataSet1,
        dataSet2
      ]
    
  );


【讨论】:

是的,但是 data_list 是动态的,如果我创建多个查询并将其存储在一个列表中并在 forEach() 中调用所有这些查询,则反应抱怨无法在回调中调用查询功能 动态?你的意思是你不知道需要执行多少查询?似乎有点奇怪。听起来像架构的问题。一般背景是什么?如果执行的是同一个查询,但变量不同,那么所有这些变量肯定应该在同一个变量集中吗?例如,如果我想要第 1 到 10 页,我会一次性发送;不要重复查询十次。 那将是最后一个选项,但如果我们不想这样做,应该可以在不渲染组件的情况下进行查询。因为我们可以手动设置状态来触发渲染 在这里多次渲染组件不应该是您关心的问题。毕竟,您会根据组件的状态在 UI 中显示您想要的内容。多次访问网络应该是一个更大的问题。根据您所说的,您应该在单个查询中执行此操作。 那么,是否有任何可能的方法来对上述查询进行分组,因为如果我有另一个列表并且必须再次将新查询注册到后端,或者这是与 gql 反应的限制。跨度>

以上是关于如何在 react-apollo 中等待多个 useLazyQuery的主要内容,如果未能解决你的问题,请参考以下文章

如何使用异步等待处理多个异常

当我的 useEffect 钩子在 react-apollo 突变后被触发时,如何从反应中解决这个警告?

使用 react-apollo,如何使用 TypeScript 在同一个组件中定义 2 个突变?

如何在 react-apollo 中根据上下文使用两个不同的 websocket url?

react-apollo 中的 data.refetch() 函数如何工作

如何在 react-apollo graphql 查询中正确使用动态变量?