必须包含查询定义

时间:2018-06-05 09:05:46

标签: reactjs react-native graphql react-apollo aws-appsync

Iam new to react-native和appsync,graphql.we正在尝试使用react-native实现一个appsync应用程序,当我试图运行它时抛出错误说

  

14:16:38:必须包含查询定义。   * null:getQueryDefinition中的null    - diffQueryAgainstStore中的node_modules / apollo-cache-inmemory / lib / bundle.umd.js:649:64    - readQueryFromStore中的node_modules / apollo-cache-inmemory / lib / bundle.umd.js:559:32    - 读取中的node_modules / apollo-cache-inmemory / lib / bundle.umd.js:899:38    - readQuery中的node_modules / apollo-cache-inmemory / lib / bundle.umd.js:992:23   * null:更新中为null    - node_modules / apollo-client / bundle.umd.js:1609:0 in    - tryFunctionOrLogError中的node_modules / apollo-utilities / lib / bundle.umd.js:818:21   * null:null in    - performTransaction中的node_modules / apollo-cache-inmemory / lib / bundle.umd.js:961:22    - markMutationResult中的node_modules / apollo-client / bundle.umd.js:1473:0    - node_modules / apollo-client / bundle.umd.js:797:20    - notifySubscription中的node_modules / zen-observable-ts / node_modules / zen-observable / lib / Observable.js:150:3    - onNotify中的node_modules / zen-observable-ts / node_modules / zen-observable / lib / Observable.js:195:5   * null:下一个为null    - notifySubscription中的node_modules / zen-observable-ts / node_modules / zen-observable / lib / Observable.js:150:3   * null:flushSubscription中的null    - node_modules / zen-observable-ts / node_modules / zen-observable / lib / Observable.js:190:26 in   * null:null in    - 在tryCallOne中的node_modules / promise / setimmediate / core.js:37:14    - node_modules / promise / setimmediate / core.js:123:25 in    - ......来自框架内部的10多个堆栈框架

我试图找出apollo-cache中的错误,但是我找不到一个。当我按下发送按钮时,我得到了这个。

import React, { Component } from 'react';
import { KeyboardAvoidingView, Text, Button, TextInput, StyleSheet, Alert } from 'react-native';

export default class ChatInput extends Component {

  constructor(props) {
      super(props);
      this.userid = props.userid;
      this.state = {
          text: ''
      }
  }

  handleSend = () => {
      if (this.state.text === '') {
          return false;
      }
      const chat = {
          userid: this.userid,
          text: this.state.text,
          createdAt: new Date().toISOString()
      }
      this.props.onSubmit(chat);
      this.setState({
         text: ''
      })
      this.textInput.clear();
  }

  render() {
    return (
    <KeyboardAvoidingView>
        <TextInput ref={input => { this.textInput = input }} placeholder="Message.." 
        onChangeText={(text) => this.setState({text})} onSubmitEditing={this.handleSend} 
        autoFocus={true} blurOnSubmit={false} returnKeyType="send"></TextInput>
        <Button title="Send" onPress={this.handleSend}></Button>
    </KeyboardAvoidingView>
    );
  }
}



 const ChatInputData = compose(
    graphql(PostMessage, {
        options: {
            fetchPolicy: 'no-cache'
        },props: (props) => ({
                onSubmit: chat => {
                    props.mutate({
                        variables: chat,
                        optimisticResponse: {
                            __typename: 'Mutation',
                            post: {
                                __typename: ChatHistory,
                                id: chat.createdAt,
                               userid: chat.userid,
                                text: chat.text,
                                createdAt: chat.createdAt
                            }
                        },
                        update: (proxy, {data: {post}}) => {
                            const data = proxy.readQuery({ query: PostMessage });
                            data.listPostMessages.items.push(Object.assign({}, post));
                            proxy.writeData({query: listPostMessages, data});
                        }
                    })
                }
            })
        })
    )(ChatInput)

请帮帮我!谢谢你提前

4 个答案:

答案 0 :(得分:0)

在这一行:

 const data = proxy.readQuery({ query: PostMessage });

我没有看到您要定义查询的PostMessage的引用。

答案 1 :(得分:0)

错误表示在导入的PostMessage中无法找到查询。确保它看起来像这样:(而不是速记等效物)

query postMessage($id: ID!) {
    postMessage(id: $id) {
        id
        title
    }
}

答案 2 :(得分:0)

我通过纠正我的变异解决了这个错误,即我的案例中的PostMesssage。这个错误

  

必须包含查询定义

主要发生在您使用graphql编写的查询不正确的情况下。开始了解如何传递变量以及如何使用它们以及如何定义它们。

答案 3 :(得分:0)

当我添加了新的解析器功能(在新文件中)但未将对这些解析器的引用包括到graphql的可执行模式中时,我也遇到了此错误。