GraphQL的旅程(7) 在React中实现最简GraphQL前端(附加Skaffold)

使用 react-apollo

我打算使用GraphQL的API来创建一个前端应用程序来获取数据。可使用的框架有React和Vue.js等。这次我将使用React.js(上次是用Vue)。

除了React.js,我们还将使用apollo-client(GraphQL客户端库),以及使用React更方便地使用apollo的react-apollo。

    react-apollo

React-apollo的文档相对较丰富。

前提 tí)

假设某个GraphQL服务器上有一个用户的API。

type User {
  id: ID! @unique
  name: String!
}

首先,在已安装create-react-app的服务器上创建一个模板。

用以下命令创建一个模板。

create-react-app <app_name>

添加React-Apollo等库

yarn add apollo-boost react-apollo graphql-tag graphql

src/App.jsにGraphQLサーバへの接続を書く

注意:请修改GraphQL服务器地址。

import { ApolloProvider } from "react-apollo";
import gql from "graphql-tag";
import ApolloClient from 'apollo-boost';
import { Query } from "react-apollo";

const client = new ApolloClient({
  uri: "http://<GraphQLサーバアドレス>"
});

const Users = () => (
  <Query
    query={gql`
      {
        users {
          id
          name
        }
      }
    `}
  >
    {({ loading, error, data }) => {
      if (loading) return <p>Loading...</p>;
      if (error) return <p>Error :(</p>;

      return data.users.map(({ id, name }) => (
        <div key={id}>
          <p>{`${id}: ${name}`}</p>
        </div>
      ));
    }}
  </Query>
);
    最後にの間に先ほどのUserを挿入します。
class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">Welcome to React</h1>
        </header>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
        <ApolloProvider client={client}>
        <div>
          <h2>My first Apollo app</h2>
        </div>
        <Users/>
        </ApolloProvider>
      </div>
    );
  }
}

文件的结构如下所示。已更新★。

.
├── package.json
├── public
│   ├── favicon.ico
│   ├── index.html
│   └── manifest.json
├── README.md
├── src
│   ├── App.css
│   ├── App.js ★
│   ├── App.test.js
│   ├── index.css
│   ├── index.js
│   ├── logo.svg
│   └── registerServiceWorker.js
└── yarn.lock

开始

yarn start

使用以下方式,当您访问http://localhost:3000/时,React应用程序将启动。

image.png

请注意:在这里出现”tokyo”等数据之前,您需要预先准备好GraphQL服务器(prisma, graphql-yoga的情况下)。

附录。使用Skaffold实现Kubernetes自动部署。

接下来是娱乐节目。

skaffold.yamlを追加


apiVersion: skaffold/v1alpha2
kind: Config
build:
  artifacts:
  - imageName: react-apollo-sample
deploy:
  kubectl:
    manifests:
      - k8s/*
    skaffoldがKubernetes上にコンテナを起動するための設定用k8sフォルダを作成。下記を追加。

kubernetes/ 载具.yaml


apiVersion: v1
kind: Pod
metadata:
  name: react-apollo-sample
  labels:
    app: react-apollo-sample
spec:
  containers:
  - name: react-apollo-sample
    image: react-apollo-sample
    ports:
    - containerPort: 3000

k8s/service.yaml 可以被翻译为「k8s/服务.yaml」。


kind: Service
apiVersion: v1
metadata:
  name: react-apollo-sample
spec:
  selector:
    app: react-apollo-sample
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000
    nodePort: 30080
  type: NodePort
    開発用の環境をデプロイ(ファイル変更検知→自動再デプロイ)
skaffold dev
    本番用の環境をデプロイ
skaffold run

好了好了,终于接下来是Apollo Server了。2.0版本也已经发布,拥有各种功能,包括batching等。
我们将深入探讨能够实现多个GraphQL服务器协同的Schema stitching。

广告
将在 10 秒后关闭
bannerAds