不带查询树的链接树“渲染的钩子比上一次渲染期间要多”

时间:2019-10-17 18:01:52

标签: javascript reactjs apollo react-apollo

这是使用其余链接的阿波罗客户。 我有2个需要打的API,1个带有记录的值和ID,另一个API提供了有关记录的更多信息。然后,我将要呈现的内容的信息缝合在一起。不,不,没有gql后端,只是想站稳脚跟并吸引客户。 我尝试执行此操作的方法是使用类似的钩子

const {data: recordsById = {}, loading: loading1} = useQuery(firstQuery, {variables: {sectionId}})
const records = Object.keys(recordsById).map((recordId) => {
  const {data} = useQuery(secondQuery, {skip: loading1, variables: {sectionId, recordId}})
  return {
    id: recordId,
    value: recordsById[recordId],
    info: data,
  }
})

很明显,当firstQuery用{fooId: 'something', barId: 'else'}之类的对象响应时,在下一个渲染中会有更多useQuery效果。 像w / apollo这样的顺序查询的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以将第二个查询移到子组件中。 当第一个查询完成后,您将呈现所有子组件,然后它们可以安全地使用第二个查询(无条件)。

答案 1 :(得分:0)

反应失败,因为在内部,它将钩子的每次调用绑定到组件及其调用的顺序,这意味着在每个组件中,钩子的调用顺序和被调用的钩子的数量应为常数,在您的组件中应避免使用钩在任何种类的循环中,例如将其拆分为单独的组件