TypeError: undefined не является объектом (оценивает '_props.listMessagesQuery.listMessages') в ReactNative

Я новичок в response-native и aws appsync. Мы пытаемся отобразить список сообщений, но когда я запускаю react-native run-android, он выдает ошибку, говоря

TypeError: undefined is not an object(evaluating '_props.listMessagesQuery.listMessages')

[Ниже приведен URL-адрес скриншота с ошибкой] https://i.stack.imgur.com/b1Wlj.png

Chat.js

import React,{Component} from 'react';
import ChatInput from './ChatInput';
import ChatMessages from './ChatMessages';
import { graphql, compose } from 'react-apollo';
import listMessages from './querys/listMessages';
import createMessage from './querys/createMessage';
import gql from 'graphql-tag';
import {
    Platform,
    StyleSheet,
    Text,
    View,
    scrollIntoView
  } from 'react-native';

class Chat extends Component {

  state = {
    message: '',
  }

    render() {
      return (
        <View className='Chat'>
          <ChatMessages
            messages = {this.props.listMessagesQuery.listMessages || []}
            endRef = {this._endRef}
          />
          <ChatInput
            message = {this.state.message}
            onTextInput = {(message) => this.setState({message})}
            onResetText = {() => this.setState({message: ''})}
            onSend = {this._onSend}
          />
        </View>
      );
    }

    _onSend = () => {
      //console.info(`Send: ${this.state.message}`)
      this.props.createMessageMutation({
        variables: {
          text: this.state.message,
          sentById: this.props.userId
        }
      })
    }


    /*
     * AUTO SCROLLING
     */

    _endRef = (element) => {
      this.endRef = element
    }

    componentDidUpdate(prevProps) {
      // scroll down with every new message
      if (prevProps.listMessagesQuery.listMessages !== this.props.listMessagesQuery.listMessages && this.endRef) {
        this.endRef.scrollIntoView()
      }
    }

  }
export default compose(
    graphql(listMessages, {
        options: {
            fetchPolicy: 'cache-and-network'
        },
        props: (props) => ({
            posts: props.listMessagesQuery.listMessages && props.listMessagesQuery.listMessages.Message,
        })
    }))(Chat)

App.js

import React,{ Component} from 'react';
import * as AWS from 'aws-sdk';
import {
  Platform,
  StyleSheet,
  Text,
  View
} from 'react-native';
import gql  from 'graphql-tag';
import { graphql,compose} from 'react-apollo';
import generateStupidName from 'sillyname';
import localStorage from 'react-native-sync-localstorage';
import Chat from './Chat';
import { Async } from 'react-async-await';
import createPerson from './querys/createPerson';

const CHAT_USER_NAME_KEY = 'CHAT_USER_NAME'
const CHAT_USER_ID_KEY = 'CHAT_USER_ID'

class App extends Component {
    async componentDidMount() {
      let name = localStorage.getItem(CHAT_USER_NAME_KEY)
      if (!name) {
                name = generateStupidName()
                const result = await this.props.createPersonMutation({
                  variables: { name }
             })
        localStorage.setItem(CHAT_USER_NAME_KEY, result.data.createPerson.name);
        localStorage.setItem(CHAT_USER_ID_KEY, result.data.createPerson.id);
      }
    }
  render() {
    const name = localStorage.getItem(CHAT_USER_NAME_KEY)
    const userId = localStorage.getItem(CHAT_USER_ID_KEY)
    return (
      <View style = {styles.container}>
         <Chat name = {name} userId = {userId} />
      </View>
    );
  }
}
// const createPerson =gql`
// mutation createPerson($name:String!){
//   createPerson(input :{
//     name : $name
//   }){
//     id
//     name
//   }
// }
// `
// export default graphql(createPerson,{name:'createPersonMutation'})(App)
export default compose(
  graphql(createPerson, {name:'createPersonMutation'}))(App)

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

Я не понимаю эту ошибку Пожалуйста, помогите мне. Спасибо! заранее

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
637
2

Ответы 2

Пожалуйста, проверьте формат

this.props.listMessagesQuery.listMessages

Поскольку ошибка определила, что конкретные данные или реквизиты, которые вы передаете, не являются объектом.

console.info(this.props.listMessagesQuery.listMessages)

проверьте, нашли ли вы его в текущем формате. Если вы ничего не нашли, поделитесь этим результатом console.info. Надеюсь, это поможет тебе

вы не отправляете listMessagesQuery.listMessages в качестве реквизита для компонента Chat.js, вы отправляете только имя и userId в качестве реквизита для компонента Chat

ваш существующий код в App.js

<Chat name = {name} userId = {userId} />

вам нужно отправить

<Chat name = {name} userId = {userId} listMessagesQuery = {}/>

Спасибо за уделенное время @Sathvik Nasani. Как вы указали выше ** listMessagesQuery = {} ** я не могу отправить пустое выражение в компонент чата. Можете ли вы предложить мне это исправить, если я ошибаюсь. Спасибо !!

user9526901 04.06.2018 11:07

привет @bharathkuppala, откуда вы получаете этот объект listMessagesQuery? не могли бы вы предоставить полную информацию

Sathvik Nasani 04.06.2018 13:26

импортировать gql из 'graphql-tag'; экспорт по умолчанию gql` query listMessagesQuery {listMessages {id text createdAt sentBy {id name}}} `;

user9526901 04.06.2018 14:47

Другие вопросы по теме