React-Native TypeError: Undefined не является объектом (оценка this.state.signatures.length)

Я новичок в react-native. Я пытался получить данные из API, а затем показать их в представлении. это мой код

FetchSignatures.js:

    const URL = 'http://localhost:8000';

    export default {
     async fetchSignatures() {
       try{
           let response = await fetch(URL+'/api/signatures');
           let responseJsonData = await response.json();
           return responseJsonData;
       }
       catch(e){
         console.log(e)
       }
     }
    }

Signatures.js:

    import React, { Component } from 'react';
    import { View, Text, StyleSheet  } from 'react-native';
    import ajax from '../services/FetchSignatures';
    import SignaturesList from '../components/SignaturesList';

    export class Signatures extends Component {
      state = {
        signatures: []
      }

      async componentDidMount() {
        const signatures = await ajax.fetchSignatures();
        this.setState({signatures});
      }
      render() {
        return (
        <View>
        {
          this.state.signatures.length > 0 ? <SignaturesList signatures= 
          {this.state.signatures}/> : <Text>No Guest</Text>
        }
        </View> 
        )
      }
    }

    export default Signatures;

Он всегда возвращает ошибку, в которой говорится, что «TypeError: Undefined не является объектом (оценка this.state.signatures.length»).

это снимок экрана моего API:

введите здесь описание изображения

Пожалуйста, помогите мне решить эту проблему .. Заранее благодарю ..


person Almaida Jody    schedule 14.10.2018    source источник
comment
Перед установкой состояния, пожалуйста, зарегистрируйте ответные подписи и посмотрите, получаете ли вы их. Если вы не получаете действительный ответ, сигнатуры могут быть нулевыми или неопределенными.   -  person bennygenel    schedule 14.10.2018
comment
как это сделать? Я использую consolelog, но не знаю, где посмотреть журнал ..   -  person Almaida Jody    schedule 14.10.2018
comment
Для получения дополнительной информации об отладке приложений, поддерживающих реакцию, посетите facebook.github.io/react-native / docs / debugging   -  person bennygenel    schedule 14.10.2018


Ответы (1)


Когда вы выполняете рендеринг this.state.signatures.length, сигнатуры не создаются как состояние в то время, потому что для получения данных из API требуется некоторое время. Это причина того, что вы получаете неопределенную ошибку. Итак, просто создайте условный рендеринг.

Попробуйте код ниже.

render() {
        if(this.state.signatures){
          return(
            this.state.signatures.length > 0 ? <SignaturesList signatures= 
            {this.state.signatures}/> : <Text>No Guest</Text>

          );
        }
  }
person ehsan    schedule 14.10.2018
comment
потому что получение данных из API занимает некоторое время. так легко вы сказали, что время выполнения - основная проблема этого? - person Almaida Jody; 14.10.2018
comment
если это так, то простое добавление условного оператора ничего не решит. - person Almaida Jody; 14.10.2018
comment
мой ответ: как может быть такое чертово состояние undefined, в то время как у моего API нет никаких проблем. Не собираюсь делать ошибку. если я просто хочу, чтобы ошибка исчезла, я легко удалю компонент. этот условный оператор просто проверяет, истинно ли состояние или нет, или мы можем сказать, равно нулю или нет. чувак .. Я новичок в react-native, но это не значит, что я новичок в профессиональном программисте. - person Almaida Jody; 14.10.2018