如何将 UseQuery 与 useEffect 结合使用?

Rog*_*ger 16 reactjs apollo-client

如何在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)
  }, []);
Run Code Online (Sandbox Code Playgroud)

Rad*_*iță 6

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

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

如果您需要对 a 的结果执行某些操作,useQuery只需使用 auseEffect并依赖于该结果


Bre*_*ody 6

Apollo Client useQueryhook 在组件渲染时自动执行相应的查询。这使得它与在没有依赖项的情况下执行查询非常相似useEffect。喜欢:

useEffect(() => {
  const data = executeQuery()
}, [])
Run Code Online (Sandbox Code Playgroud)

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


zlo*_*ctb 5

这里有很好的答案https://github.com/trojanowski/react-apollo-hooks/issues/158

const { loading, data, error } = useQuery(SOME_QUERY)

// If you absolutely need to cache the mutated data you can do the below. But
// most of the time you won't need to use useMemo at all.
const cachedMutatedData = useMemo(() => {
  if (loading || error) return null

  // mutate data here
  return data
}, [loading, error, data])

if (loading) return <Loader />
if (error) return <Error />

// safe to assume data now exist and you can use data.
const mutatedData = (() => {
  // if you want to mutate the data for some reason
  return data
})()

return <YourComponent data={mutatedData}  />
Run Code Online (Sandbox Code Playgroud)