当前位置: 首页 > 面试题库 >

在带有react-apollo-hooks的函数中尝试调用useQuery

孙绍辉
2023-03-14
问题内容

我想在需要时调用useQuery,

但是useQuery不能在函数内部。

我尝试的代码是:

export const TestComponent = () => {
...
  const { data, loading, error } = useQuery(gql(GET_USER_LIST), {
    variables: {
      data: {
        page: changePage,
        pageSize: 10,
      },
    },
  })
  ...
  ...
  const onSaveInformation = async () => {
    try {
      await updateInformation({...})
      // I want to call useQuery once again.
    } catch (e) {
      return e
    }
}
...

如何多次调用useQuery?

我可以随时打电话吗?

我已经寻找了几个站点,但是找不到解决方案


问题答案:

useQuery是一个声明式的React Hook。它不具有经典的接收数据功能。首先,请确保了解React
Hooks或暂时不使用它们(Stackoverflow上90%的问题发生是因为人们试图一次学习很多东西)。Apollo文档对于react- apollo使用渲染道具的官方软件包非常有用。这也一样有效,一旦您了解了Apollo Client
Hooks,就可以进行一些重构。因此,您的问题的答案是:

如何多次调用useQuery?

您不会多次调用它。查询结果可用或更新时,组件将自动重新呈现。

我可以随时打电话吗?

不,只能在顶层调用钩子。而是从上部作用域(关闭)在您的函数中提供数据。

updateInformation的突变可能会更新应用程序的缓存,这又触发了React组件的重新呈现,因为它已“订阅”到查询中。在大多数情况下,更新是全自动,因为阿波罗将通过组合标识的实体__typenameid。下面的一些伪代码说明了突变与突变如何协同工作:

const GET_USER_LIST = gql`
  query GetUserList {
    users {
      id
      name
    }
  }
`;

const UPDATE_USER = gql`
  mutation UpdateUser($id: ID!, $name: String!) {
    updateUser(id: $id, update: { name: $name }) {
      success
      user {
        id
        name
      }
    }
  }
`;

const UserListComponen = (props) => {
  const { data, loading, error } = useQuery(GET_USER_LIST);
  const [updateUser] = useMutation(UPDATE_USER);

  const onSaveInformation = (id, name) => updateUser({ variables: { id, name });

  return (
    // ... use data.users and onSaveInformation in your JSX
  );
}

现在,如果用户名通过突变更改,则Apollo将自动更新缓存并触发组件的重新呈现。然后,组件将自动显示新数据。欢迎使用GraphQL的强大功能!



 类似资料:
  • High performance Next + React + GraphQL starter kit The purpose of this starter kit is not to be complete solution, but introduction for creating high performance websites with Next.js, React and Grap

  • 问题内容: 我以为useEffect的第一个函数在第一个渲染之前被调用,但是当我调用下面的方法时,恰好在return方法调用被调用之前,我的console.log被调用,然后useEffect的第一个参数函数被调用。 通话顺序: 资源: 问题答案: 使用创建的效果在渲染提交阶段之后运行,因此在渲染周期之后运行。这是为了确保在渲染提交阶段不会执行任何可能导致不一致的副作用。 根据文档 不允许在功能组

  • 我正在做的是创建一个带有反应挂钩的认证系统。但是,当我声明并调用一个常量时,它会返回下面的错误。声明常量和/或函数的正确位置是什么? 错误:无法在顶层调用React挂钩“useDispatch”。必须在React函数组件或自定义React钩子函数中调用React钩子

  • 嗨,我为tictactoe游戏编写了这个示例代码,除了checkWinner函数之外,其他都正常工作,它接受两个参数ArrayList和currentPlayer来检查胜利者。该函数在每个玩家在tictactoe游戏中查看获胜的点击单元格后调用。我不知道错误在哪里!事先谢谢你

  • 是否有方法通过钩子在React功能组件中模拟?

  • 问题内容: 这是我之前的问题的后续工作,但是如果我在其中的映射如何在React的render()方法中调用函数。 示例(此代码在extended的类内): 无论我尝试什么,我总是最终得到“ this.getItemInfo()不是一个函数”。 我在函数内部进行了on操作,实际上是在引用Window对象,但是我似乎找不到改变它的方法。 我累了: 定义为函数getItemInfo(){..} 作为第二