用graphql在react-native中重新查询

时间:2019-07-31 17:45:48

标签: javascript reactjs react-native graphql express-graphql

我是初学者,我尝试学习graphql。我想创建一个应用程序,该应用程序从react Web应用程序更新数据(实时)以使用graphql响应本机移动应用程序。在网络应用程序中,当我按下“确定”按钮时,很容易重新获取查询。在移动应用中,当我按下Web应用中的按钮时,我不知道如何重新查询。

我尝试通过websockets(socket.io)传输数据,最后我设法传递了数据,但这很耗时。

这是WEB APP

和 这是我想做的

使用react.js构建的Web应用

使用react-native.js构建的移动应用

这是我的本机代码。我不知道如何以及在哪里使用refetch查询。

App.js

import React, { Component } from "react";
import ApolloClient from "apollo-boost";
import { ApolloProvider } from "react-apollo";
import { View, Text } from "react-native";
import BookList from "./components/BookList";
//apollo client
const client = new ApolloClient({
  uri: "http://XXX.XXX.X.X:4000/graphql"
});

class App extends Component {
  render() {
    return (
      <ApolloProvider client={client}>
        <View>
          <BookList />
        </View>
      </ApolloProvider>
    );
  }
}

export default App;

BookList.js

import React, { Component } from "react";
import { graphql } from "react-apollo";
import { Button, View, Text } from "react-native";
import { gql } from "apollo-boost";
import io from "socket.io-client";

const getBooksQuery = gql`
  {
    books {
      name
      id
      genre
    }
  }
`;

class BookList extends Component {

  displayBooks = () => {
    var data = this.props.data;

    if (data.loading) {
      return <Text>loading books...</Text>;
    } else {
      return data.books.map(book => {
        return <Text>{book.name}</Text>;
      });
    }
  };
  render() {
    return <View>{this.displayBooks()}</View>;
  }
}

export default graphql(getBooksQuery)(BookList);

在Web应用程序中,很容易应用某项功能,因为我将refetch查询放在了当我按下按钮时具有的功能内:

submitForm = e => {
    e.preventDefault();
    this.props.addBookMutation({
      variables: {
        name: this.state.name,
        genre: this.state.genre,
        authorid: this.state.authorid
      },
      refetchQueries: [{ query: getBooksQuery }]
    });
  };

*对不起,我的英语

1 个答案:

答案 0 :(得分:1)

因此,根据阿波罗的文件

  

您可以像在React Web上一样将Apollo与React Native一起使用。

这是有关使用react-native实现的相应页面。

https://www.apollographql.com/docs/react/recipes/react-native/

要通过graphQL中的套接字获取数据,您需要使用订阅

请按照以下步骤操作;

  1. 在您的后端项目中创建订阅模式和订阅功能,以在更新书籍时分派。我不知道您将哪个服务器库用于后端,但是我强烈建议您使用apollo服务器here
  2. 在移动应用中,您需要subscribeToMore在getBooksQuery中,以获取所有图书。

更新书籍后,您的服务器会将更新后的书籍发送给订阅的客户,并且您可以从订阅后的移动应用中获取书籍。

PS:您可以使用howtographql来学习更新版本的阿波罗。 (提供渲染道具功能的组件)