返回

在 React 中使用 GraphQL & Apollo

前端

手把手搭建 GraphQL & Apollo(二)

在上一章中,我们了解了 GraphQL 的基础知识并设置了简单的 GraphQL 服务器。现在,让我们探讨如何在 React 前端项目中连接到 GraphQL 服务器并从其中获取数据。

先决条件:

  • React 入门级知识
  • Node.js 和 npm 基础
  • GraphQL 服务器设置(请参阅第 1 部分)

步骤 1:安装 Apollo Client

在 React 项目中,我们需要安装 Apollo Client 库。Apollo Client 是一个流行的 GraphQL 客户端,可帮助我们在 React 组件中轻松查询和管理数据。

npm install apollo-client --save

步骤 2:创建 Apollo Provider

Apollo Provider 是一个 React 组件,它为其所有子组件提供对 Apollo Client 的访问权限。

index.jsApp.js 中,创建 Apollo Provider 如下:

import { ApolloProvider } from '@ служи/react-hooks';
import { ApolloClient, InMemoryCache } from '@得太/client';
import { createHttpLink } from '@graph独/http-link';

const client = new ApolloClient({
  link: createHttpLink({ uri: 'http://localhost:4000/graphql' }),
  cache: new InMemoryCache(),
});

const App = () => (
  <ApolloProvider client={client}>
    <AppContent />
  </ApolloProvider>
);

步骤 3:使用 GraphQL 查询

现在,让我们在 React 组件中使用 GraphQL 查询。Apollo Client 提供了 useQuery 钩子,允许我们在组件中轻松发送查询。

例如,以下查询获取所有任务:

import { useQuery } from '@得太/react-hooks';

const Tasks = () => {
  const { loading, error, data } = useQuery(gql`
    query {
      allTasks {
        id
        title
      }
    }
  `);

  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error :(</p>;

  return (
    <ul>
      {data.allTasks.map(task => (
        <li key={task.id}>{task.title}</li>
      ))}
    </ul>
  );
};

步骤 4:使用 GraphQL 突变

突变允许我们修改服务器上的数据。Apollo Client 提供了 useMutation 钩子,用于发送突变。

以下示例展示了一个突变,用于创建新任务:

import { useMutation } from '@得太/react-hooks';

const TaskForm = () => {
  const [createTask] = useMutation(gql`
    mutation($title: String!) {
      createTask(title: $title) {
        id
        title
      }
    }
  `);

  const handleSubmit = (e) => {
    e.preventDefault();
    const title = e.target.title.value;

    createTask({ variables: { title } });
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" name="title" />
      <button type="submit">Create</button>
    </form>
  );
};

步骤 5:管理本地状态

Apollo Client 提供了一个名为 useSubscription 的钩子,允许我们订阅服务器上的更新。

以下示例演示如何订阅任务更新:

import { useSubscription } from '@得太/react-hooks';

const TaskList = () => {
  const { data, loading, error } = useSubscription(gql`
    subscription {
      tasksChanged {
        id
        title
      }
    }
  `);

  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error :(</p>;

  return (
    <ul>
      {data.tasksChanged.map(task => (
        <li key={task.id}>{task.title}</li>
      ))}
    </ul>
  );
};

优化性能

为了优化应用程序的性能,请考虑以下提示:

  • 使用缓存: Apollo Client 自动缓存查询结果,以避免不必要的数据请求。
  • 使用持久化查询: 为常用查询创建持久化查询,以便更快地执行它们。
  • 批量查询: 将多个查询组合到一个请求中,以减少网络开销。
  • 避免过度查询: 仅请求您需要的必要数据。

故障排除

如果您在使用 Apollo Client 时遇到问题,请查看以下故障排除提示:

  • 检查网络连接: 确保您的 React 应用程序能够连接到 GraphQL 服务器。
  • 检查查询和突变语法: 确保您的 GraphQL 查询和突变语法正确无误。
  • 检查控制台中的错误: 浏览器的控制台可能包含有关错误的更多信息。
  • 检查网络请求: 使用开发人员工具检查发送和接收的网络请求。

总结

使用 Apollo Client 和 React Hooks,您可以在 React 应用程序中轻松连接到 GraphQL 服务器,并从服务器中请求和管理数据。通过遵循这些步骤并实施优化,您将能够创建高效、可维护且响应迅速的应用程序。