当前位置:   article > 正文

Apollo学习-useQuery学习

usequery

一、useQuery勾子

useQuery是一个 React hook,它允许你在 React 组件中轻松地获取和使用 GraphQL 查询的数据。

二、useQuery勾子的用法

1、引入useQuery
  1. //从@apollo/client包中引入useQuery勾子
  2. import { useQuery } from '@apollo/client';
2、定义GraphQL查询

使用 GraphQL 语言编写你的查询。你可以将其定义为一个字符串常量,或者使用 gql 模板标签。

  1. const GET_USERS = gql`
  2. query getUsers {
  3. users {
  4. id
  5. name
  6. }
  7. }
  8. `;
3、使用useQuery

在组件中调用 useQuery,传入你的查询。useQuery 会返回一个包含查询状态的对象。

const { loading, error, data } = useQuery(GET_USERS);
4、useQuery的可选参数

useQuery 还接受一些可选参数,如 variablesfetchPolicy 等,以控制查询的行为。

  1. useQuery(GET_USERS, {
  2. variables: { limit: 10 },
  3. fetchPolicy: 'cache-and-network',
  4. });

三、具体使用

1、创建Apollo客户端
  1. //在应用程序中创建Apollo客户端,并导出默认值。
  2. // 运行前请先启动GraphQL服务,并确保服务地址正确。
  3. import { ApolloClient } from 'apollo-client';
  4. import { HttpLink } from 'apollo-link-http';
  5. import { InMemoryCache } from 'apollo-cache-inmemory';
  6. import { gql } from 'apollo-boost';
  7. // HTTP连接
  8. const link = new HttpLink({
  9. uri: 'http://localhost:4000/graphql',
  10. });
  11. //内存缓存
  12. const cache = new InMemoryCache();
  13. // Apollo客户端
  14. const client = new ApolloClient({
  15. link: link,
  16. // 传入缓存
  17. cache: cache,
  18. });
  19. // 导出默认值
  20. export default client;
2、创建查询
  1. const query = gql`
  2. {
  3. // 这里可以写查询语句
  4. }
  5. `;
3、定义查询方法
  1. // 定义查询方法
  2. const useQuery = () => {
  3. const { loading, error, data } = client.query({
  4. query: query,
  5. });
  6. return { loading, error, data };
  7. };

四、

useQuery hook可以说是执行GraphQL查询的最方便的方法

它在函数组件的开头(想其他钩子一样)被调用,并作为第一个必须的参数接收——用gql解析查询

当您使用组件时具有应立即执行的查询时最好使用它,例如用户希望在页面加载时立即查看的数据列表

useQuery返回一个对象,我们可以从中轻松地结构所需的值。执行查询后,需要在其中获取数据的每个组件中使用三个主要值。他们是loading , error , 和data

  1. const GET_POSTS = gql`
  2. query GetPosts($limit: Int) {
  3. posts(limit: $limit) {
  4. id
  5. body
  6. title
  7. createdAt
  8. }
  9. }
  10. `;
  11. function App() {
  12. const { loading, error, data } = useQuery(GET_POSTS, {
  13. variables: { limit: 5 },
  14. });
  15. if (loading) return <div>Loading...</div>;
  16. if (error) return <div>Error!</div>;
  17. return data.posts.map((post) => <Post key={post.id} post={post} />);
  18. }

在显示正在获取的数据之前,我们需要在加载时进行处理(当loading设置为true时),并且我们尝试获取数据

届时,我们将显示一个带有文本“Loading”的div或一个加载中的图标。我们还需要处理在获取查询时出错的可能性,例如是否存在网络错误或编写查询时出错(语法错误)

一旦完成加载并且没有错误,我们就可以在组件中使用我们的数据,通常将其显示给我们的用户(如上例所示)

我们还可以从useQuery返回的对象中解构出其他值,但是实际上在执行useQuery每个组件中都需要loading , error , 和data。您可以在此处看到我们可以从useQuery中获取的所有数据的完整列表。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/827126
推荐阅读
相关标签
  

闽ICP备14008679号