问题描述
在我的一个组件中,我立即查询我的后端。之后,我想用我第一个查询的数据再次查询我的后端,所以我第二个查询的变量来自第一个。
我已经尝试过 useLazyQuery
但它要么不起作用,要么我放置的位置不正确。我试过在 skip
钩子中使用 useQuery
但它似乎不起作用,因为我是我测试跳过的条件,也是我正在使用的变量查询本身,我正在检查它是否已定义。
我宁愿不使用 compose
,因为我主要在我的 React 组件中使用钩子,我不确定如何构建它们并将它们与我的代码相适应。
我还分别使用了两个查询结果。我的后端结构像一棵树,所以我同时使用一个节点和它的子节点。
解决方法
如果可以避免的话,我不会为此使用 useLazyQuery
,因为它的查询生命周期与更常见的 useQuery
不同。它可以工作,但让我们尝试使用 useQuery
。
您希望无条件执行第一个查询 query1
。很简单。
您希望第二个查询 query2
仅在 query1
返回结果时执行。然后是根据 skip
返回的内容在 query2
上使用 query1
的问题。最简单的形式:
const { loading: loading1,error: error1,data: data1 } = useQuery('...query1...');
const { loading: loading2,error: error2,data: data2 } = useQuery('...query2...',{
variables: {
myVariable: data1 && data1.path.to.data,}
skip: !data1,// This is simpler that checking error1 and loading1.
});
此外,如果第一个查询没有返回足够的结果,您可能希望阻止第二个查询的执行。根据您的确切架构和查询,它可能是这样的:
skip: !data1 || !data1.searchForIDs || data1.searchForIDs.length === 0