react使用apollo简单的获取列表

react

yarn add apollo-boost apollo-client react-apollo apollo-cache-inmemory apollo-link-http graphql-tag graphql

src/index.js

import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
// import { ApolloClient } from "apollo-client";
import ApolloClient from "apollo-boost";
import { ApolloProvider } from "react-apollo";
import gql from "graphql-tag";

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

// 普通的JavaScript发送查询
client
  .query({
    query: gql`
      {
        hello
      }
    `,
  })
  .then(({ data }) => console.log(data));

ReactDOM.render(
  <ApolloProvider client={client}>
    <App />
  </ApolloProvider>,
  document.getElementById("root"),
);

src/App.js

import React, { Component, Fragment } from "react";
import { Query, ApolloConsumer } from "react-apollo";
import gql from "graphql-tag";

class QueryAllCat extends Component {
  render() {
    const { title } = this.props;
    const GET_CATS = gql`
      query Getcats {
        cats {
          id
          name
        }
      }
    `;
    return (
      <Fragment>
        <h3>{title}</h3>
        <Query query={GET_CATS}>
          {({ loading, error, data, refetch }) => {
            if (error) return "error";
            if (loading || !data) return "loading";
            return (
              <Fragment>
                <ul>
                  {data.cats.map(el => (
                    <li key={el.id}>{el.name}</li>
                  ))}
                </ul>
                <button onClick={() => refetch()}>重取!</button>
              </Fragment>
            );
          }}
        </Query>
      </Fragment>
    );
  }
}

class FindCat extends Component {
  state = {
    id: "",
    cat: null,
  };
  render() {
    const { id, cat } = this.state;
    const { title } = this.props;
    const FIND_CAT = gql`
      query findCat($id: ID!) {
        findCat(id: $id) {
          id
          name
        }
      }
    `;
    return (
      <Fragment>
        <h3>{title}</h3>
        <ApolloConsumer>
          {client => (
            <Fragment>
              <input
                type="text"
                value={id}
                onChange={e =>
                  this.setState({
                    id: e.target.value,
                  })
                }
              />
              <button
                onClick={async () => {
                  const { data } = await client.query({
                    query: FIND_CAT,
                    variables: { id },
                  });
                  this.setState({
                    cat: data.findCat,
                  });
                }}
              >
                findCat
              </button>
              {!!cat && (
                <p>
                  {cat.id}::{cat.name}
                </p>
              )}
            </Fragment>
          )}
        </ApolloConsumer>
      </Fragment>
    );
  }
}

class App extends Component {
  render() {
    return (
      <Fragment>
        <QueryAllCat title="所有列表" />
        <FindCat title="id查询" />
      </Fragment>
    );
  }
}
export default App;

server

yarn add apollo-server graphql

index.js

const { ApolloServer, gql } = require("apollo-server");

const cats = [
  { id: 1, name: "ajanuw", age: 12 },
  { id: 2, name: "suou", age: 14 },
];

const typeDefs = gql`
  type Query {
    hello: String!
    cats: [Cat]!
  }

  type Cat {
    id: String
    name: String
    age: String
  }
`;

const resolvers = {
  Query: {
    hello: () => "hello world",
    cats() {
      return cats;
    },
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
});

server.listen().then(({ url }) => {
  console.log(`? Server ready at ${url}`);
});

转载于:https://www.cnblogs.com/ajanuw/p/10003983.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值