使用React Native开发GraphQL的ApolloClient的引入步骤

首先

今年我們主要使用GraphQL進行開發。
如果要在前端使用GraphQL,推薦使用ApolloClient。
這次我們將介紹在ReactNative中如何使用ApolloClient。
由於資訊有點舊,因此一開始導入花了些時間,希望對大家有所參考。

请参阅这篇文章。

阿波罗公式与React Native集成

※这个版本已经过时,直接使用会出现错误w

以下两个选项将使事情变得更容易。
有查询类型和函数类型,但推荐使用查询类型。

引入程序

1. 安装ApolloClient

这次的客户端将使用 apollo-boost 而不是 apollo-client。
react-apollo 将被用作提供者。

yarn add apollo-boost
yarn add react-apollo

2. 安装 GraphQL

由於使用GraphQL,我們需要安裝graphql-tag套件,以便在GraphQL內定義標籤。

yarn add graphql
yarn add graphql-tag

将ApolloClient集成到ReactNative中。

使用apollo-boost生成Client,并将其传递给ApolloProvider进行导航。
※与Redux相似的感觉。

如果您想要在这种情况下进行用户认证,您需要在ApolloClient的属性中进行定义。

import ApolloClient from "apollo-boost";
import { ApolloProvider } from "react-apollo";

const client = new ApolloClient({
  uri: "http://127.0.0.1/graphql"
});

const Navigation = () => (
  <ApolloProvider client={client}>
    <Provider store={store}>
      <AppNavigation />
    </Provider>
  </ApolloProvider>
);

4. 如何使用查询功能

以下是Query的使用方法。
由于gql通常非常长且被多个项目共用,因此最好的方式是创建一个名为”gql”的分离目录,并按需加载。

import gql from "graphql-tag";
import { Query } from "react-apollo";

const GET_DOG_PHOTO = gql`
  query Dog($breed: String!) {
    dog(breed: $breed) {
      id
      displayImage
    }
  }
`;

const DogPhoto = ({ breed }) => (
  <Query query={GET_DOG_PHOTO} variables={{ breed }}>
    {({ loading, error, data }) => {
      if (loading) return null;
      if (error) return `Error!: ${error}`;

      return (
        <img src={data.dog.displayImage} style={{ height: 100, width: 100 }} />
      );
    }}
  </Query>
);

5. Mutation的使用方式

如果以Query的形式,Mutation的使用方法非常简单。
你可以按以下形式进行。

import gql from "graphql-tag";
import { Mutation } from "react-apollo";

const ADD_TODO = gql`
  mutation AddTodo($type: String!) {
    addTodo(type: $type) {
      id
      type
    }
  }
`;

const AddTodo = () => {
  let input;

  return (
    <Mutation mutation={ADD_TODO}>
      {(addTodo, { data }) => (
        <div>
          <form
            onSubmit={e => {
              e.preventDefault();
              addTodo({ variables: { type: input.value } });
              input.value = "";
            }}
          >
            <input
              ref={node => {
                input = node;
              }}
            />
            <button type="submit">Add Todo</button>
          </form>
        </div>
      )}
    </Mutation>
  );
};

广告
将在 10 秒后关闭
bannerAds