Не удается прочитать свойство "setState" из null с React Native Flatlist - PullRequest
0 голосов
/ 31 марта 2020

Мои данные поступают из вложенной таблицы Firebase, и когда я устанавливаю состояние, возникает ошибка, из-за которой свойство setState не может считывать значение null. Это мой код:

componentWillMount(){
  var refx = firebase.database().ref("tutorCopy")
  refx.once("value", function (snapshot) {
    snapshot.forEach((childSnapshot) => {
      childSnapshot.forEach((childSnap) => {
        console.log(childSnap.val());
        this.setState({ markers: Object.values(childSnap.val()) })
      });
    });
  });
}

В конструкторе я инициализирую маркеры как массив:

constructor(props){
  super(props);
  this.state = {
    markers: [],
  }
}

И это мой FlatList:

<FlatList
  data={this.state.markers}
  renderItem={
    ({ item }) =>
      <View style={styles.subtitleView}>
        <Text style={{ color: '#000' }}>{item.useremail}</Text>
      </View>
  }
  style={{ width: '100%' }}
/>

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Я пока не могу комментировать, поэтому

1-й - Вы не должны устанавливать состояние внутри al oop, потому что вы переопределяете текущее состояние

2-й - Попробуйте вместо этого:

componentDidMount(){

  let markers = []
  var refx = firebase.database().ref("tutorCopy")
  refx.once("value", snapshot => {

    snapshot.forEach((childSnapshot) => {

      childSnapshot.forEach((childSnap) => {
        markers.push(childSnap.val())
        console.log(childSnap.val());

      });
    })
  });
  this.setState({
    markers: markers
  })
}
0 голосов
/ 31 марта 2020

Попробуйте это

state = {
  markers: []
};
constructor(props){
  super(props);
}

<FlatList
  data={this.state.markers}
  extraData={this.state.markers}
  renderItem={
    ({ item }) =>
      <View style={styles.subtitleView}>
        <Text style={{ color: '#000' }}>{item.useremail}</Text>
      </View>
  }
  style={{ width: '100%' }}
/>
...