如何设置反应组件内的状态?
我收到了错误消息:
未捕获的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() { ... }
}
答案 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