在React中使用Firebase Promise的setState

时间:2016-08-28 11:54:05

标签: reactjs firebase promise firebase-realtime-database

如何设置反应组件内的状态?

我收到了错误消息:

  

未捕获的TypeError:无法读取属性' setState'为null

这是组件代码列表:

class MessageList extends React.Component {
 constructor(props){
 super(props);
 this.state = {
   messages: []
 };

 var firebaseRef = firebase.database().ref();
 firebaseRef.once('value')
  .then(function(dataSnapshot) {
      this.setState({
        messages: messages
      });
   });
 }

 render() { ... }

}

2 个答案:

答案 0 :(得分:14)

指的是 承诺 范围。使用胖箭头功能(es6)

var firebaseRef = firebase.database().ref();
firebaseRef.once('value')
  .then((dataSnapshot) => {
      this.setState({
        messages: messages
      });
   });

或者在承诺

之前创建此副本
constructor(props){
 super(props);
 this.state = {
   messages: []
 };
 var that = this; 
 var firebaseRef = firebase.database().ref();
 firebaseRef.once('value')
  .then(function(dataSnapshot) {
      that.setState({
        messages: messages
      });
 });

最后一个选项,您可以将此绑定到承诺:

firebaseRef.once('value')
 .then(function(dataSnapshot) {
     this.setState({
         messages: messages
     });
}).bind(this)

答案 1 :(得分:2)

首先,我想建议您提取初始print isset($talentline[2][0]) ? $talentline[2][0]; : ""; // shorthand PHP stating that if value is set then print it, // else don't print anything. 数据 在<?php $talente = array(0=>1,1=>3); $csv[] = array(0=>"Schild", 1=>1, 2=>"Licht", 3=>"1w10", 4=>"-"); $csv[] = array(0=>"Schutz", 1=>1, 2=>"Licht", 3=>"1w10", 4=>"-"); $csv[] = array(0=>"Licht", 1=>4, 2=>"Licht", 3=>"1w10", 4=>"-"); $csv[] = array(0=>"Genesung",1=>1,2=>"Licht",3=>"-",4=>"-"); $csv[] = array(0=>"Aufopfern",1=>1,2=>"Licht",3=>"-",4=>"-"); $talentline = array_filter($csv, function($i) use ($talente) { return in_array($i, $talente--); }, ARRAY_FILTER_USE_KEY); $talentline = array_filter($talentline); print_r(array_values($talentline)); print isset($talentline[1][0]) ? $talentline[1][0]; : ""; print isset($talentline[2][0]) ? $talentline[2][0]; : ""; print isset($talentline[3][0]) ? $talentline[3][0]; : ""; 组件生命周期中,为了解决您的firebase问题,您可以按照以下代码进行操作,我只更改componentDidMount行,

setState