GraphQL客户端的使用指南

绿茶味的清风 2021-01-21 ⋅ 16 阅读

GraphQL是一种用于构建灵活和高效API的查询语言。在GraphQL中,客户端可以精确指定它所需要的数据,并且服务端可以精确返回客户端所请求的数据,这使得网络传输更加高效。为了方便使用GraphQL,有许多优秀的GraphQL客户端工具可供选择。本文将介绍一些常用的GraphQL客户端工具及其使用方法。

Apollo Client

Apollo Client是一个流行的GraphQL客户端,它提供了许多强大的功能和易于使用的API。

安装

npm install @apollo/client

配置

创建一个Apollo Client实例并配置GraphQL服务的URL。

import { ApolloClient, InMemoryCache } from '@apollo/client';

const client = new ApolloClient({
  uri: 'https://api.example.com/graphql',
  cache: new InMemoryCache(),
});

查询数据

使用Apollo Client发送GraphQL查询并处理响应。

import { gql } from '@apollo/client';

const GET_USERS = gql`
  query {
    users {
      id
      name
      email
    }
  }
`;

client.query({ query: GET_USERS })
  .then(response => console.log(response.data))
  .catch(error => console.error(error));

变更数据

使用Apollo Client发送GraphQL变更并处理响应。

import { gql } from '@apollo/client';

const CREATE_USER = gql`
  mutation createUser($input: CreateUserInput!) {
    createUser(input: $input) {
      id
      name
      email
    }
  }
`;

const input = {
  name: 'John Doe',
  email: 'johndoe@example.com',
};

client.mutate({ mutation: CREATE_USER, variables: { input } })
  .then(response => console.log(response.data))
  .catch(error => console.error(error));

Relay

Relay是Facebook开发的用于React应用的GraphQL客户端。

安装

npm install relay

配置

在React应用中配置Relay环境。

import { RelayEnvironmentProvider } from 'relay-hooks';
import { Environment } from './relay/Environment';

function App() {
  return (
    <RelayEnvironmentProvider environment={Environment}>
      {/* Your app components */}
    </RelayEnvironmentProvider>
  );
}

查询数据

使用Relay的useQuery钩子函数发送GraphQL查询并处理响应。

import { graphql, useQuery } from 'relay-hooks';

const query = graphql`
  query UsersQuery {
    users {
      id
      name
      email
    }
  }
`;

function UserList() {
  const { props, error } = useQuery(query);

  if (error) {
    console.error(error);
    return null;
  }

  if (!props) {
    return <div>Loading...</div>;
  }

  const { users } = props;

  return (
    <ul>
      {users.map(user => (
        <li key={user.id}>{user.name} - {user.email}</li>
      ))}
    </ul>
  );
}

变更数据

使用Relay的useMutation钩子函数发送GraphQL变更并处理响应。

import { graphql, useMutation } from 'relay-hooks';

const mutation = graphql`
  mutation CreateUserMutation($input: CreateUserInput!) {
    createUser(input: $input) {
      id
      name
      email
    }
  }
`;

function CreateUserForm() {
  const [commit, isInFlight] = useMutation(mutation);

  const handleSubmit = e => {
    e.preventDefault();

    const input = {
      name: e.target.name.value,
      email: e.target.email.value,
    };

    commit({ variables: { input } });

    e.target.reset();
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" name="name" placeholder="Name" />
      <input type="email" name="email" placeholder="Email" />
      <button type="submit" disabled={isInFlight}>
        {isInFlight ? 'Creating...' : 'Create User'}
      </button>
    </form>
  );
}

以上是使用Apollo Client和Relay的基本示例,它们都提供了更多高级功能,例如缓存数据、分页、订阅和类型检查。你可以根据自己的需求选择适合的GraphQL客户端工具并深入了解其文档和示例。祝你在使用GraphQL客户端时取得成功!


全部评论: 0

    我有话说: