如何将 UseQuery 与 useEffect 一起使用?

Posted

技术标签:

【中文标题】如何将 UseQuery 与 useEffect 一起使用?【英文标题】:How to use UseQuery with useEffect? 【发布时间】:2022-01-14 22:20:14 【问题描述】:

如何在 React.UseEffect 中使用 UseQuery?这是我的简单查询

  const allrecord = useQuery(ME, 
    onCompleted: ( meTeacher) => 
      setUser(meIAM);
      getRecords(
        variables: 
          orgId: meIAM.organization.id,
          pagingArg: ,
        ,
      ).then(( data ) => displayRecord(data.record));
    ,
  );
  useEffect(() => 
    console.log(allLocations)
  , []);

【问题讨论】:

能详细解释一下吗?为什么要在 useEffect 中使用它?您面临的问题是什么? 问题是我不知道什么是正确的用法以及如何使用useEffect和useQuery 其实你不需要把useQuery放在useEffect里面。你可以在外面使用它,它很好。 所以如果我想添加另一个,我只需.then(( data ) => displayRecord(data.record), studentRecord(data.record)) 【参考方案1】:

Apollo Client useQuery 钩子在组件渲染时自动执行相应的查询。这使得它非常类似于在 useEffect 中执行没有依赖关系的查询。喜欢:

useEffect(() => 
  const data = executeQuery()
, [])

还有一个替代挂钩,useLazyQuery,可用于执行查询以响应某些事件,例如按下按钮。

【讨论】:

【参考方案2】:

useQuery 是一个钩子,因此不能在分支下使用。

这意味着您必须在组件内部而不是在分支语句 (if/else/switch/useEffect) 下调用 useQuery

如果您需要对 useQuery 的结果进行处理,只需使用依赖于该结果的 useEffect

【讨论】:

以上是关于如何将 UseQuery 与 useEffect 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

调用useEffect挂钩时useQuery数据未定义?

在使用 graphql 的 useQuery 获取的数据更新 useEffect 钩子内的状态变量时防止无限渲染

在 useQuery 后反应组件不重新渲染

在 apollo graphql 的单个 useEffect 挂钩中使用多个查询

返回上一个屏幕时执行 useQuery() 挂钩反应原生堆栈导航器

GraphQL 默认数据导致 useEffect 中的无限循环