Reactjs 设置状态不';使用firebase对象更新数组

Reactjs 设置状态不';使用firebase对象更新数组,reactjs,react-native,Reactjs,React Native,所以我遇到的问题是setState方法似乎不想更新数组问题的状态。但是当我使用console.log(returnArr)时,控制台会从firebase打印我想要的物品 我做错了什么 导出默认类App扩展React.Component{ 构造函数(){ 超级(); 此.state={ 问题:[], 当前问题:0 }; } componentDidMount(){ var rootRef=firebase.database().ref(); var ref=rootRef.child(“地理”);

所以我遇到的问题是
setState
方法似乎不想更新数组
问题的状态。但是当我使用
console.log(returnArr)
时,控制台会从firebase打印我想要的物品

我做错了什么

导出默认类App扩展React.Component{
构造函数(){
超级();
此.state={
问题:[],
当前问题:0
};
}
componentDidMount(){
var rootRef=firebase.database().ref();
var ref=rootRef.child(“地理”);
var returnArr=[];
裁判
.一次(“价值”)
.then(功能(快照){
snapshot.forEach(函数(childSnapshot){
var item=childSnapshot.val();
item.key=childSnapshot.key;
如果(item.key==“2”){
返回推送(项目问题);
设置状态=()=>({
问题:returnArr
});
控制台日志(returnArr);
}
});
})
.catch(错误=>{
console.log(错误);
});
}
render(){
// ...
}
}

您不是在调用setState,而是在重新定义它

将if更改为:

if(item.key === '2'){
  returnArr.push(item.Question)
  this.setState({
      questions: returnArr
  });
  console.log(returnArr)

}

此外,您可能希望在forEach结束后调用setState。按照您实现的方式,每次执行if代码时都会调用setState。将setState调用移出forEach将使setState只被调用一次。

setState
是您应该调用的函数,而不是您应该为其指定新值的对象

如果要在firebase回调函数中使用
this
,则必须将该函数绑定到
this
或使用箭头函数。您很可能希望在处理完整个快照后将阵列设置为状态

示例

类应用程序扩展了React.Component{
// ...
componentDidMount(){
火基
.数据库()
.ref()
.儿童(“地理”)
.一次(“价值”)
。然后(快照=>{
常量问题=[];
snapshot.forEach(childSnapshot=>{
const item=childSnapshot.val();
item.key=childSnapshot.key;
如果(item.key==“2”){
问题。推送(项目。问题);
}
});
这个.setState({questions});
})
.catch(错误=>{
控制台错误(error);
});
}
// ...
}

谢谢!我明白你的意思,但现在我得到了这个错误:12:56:21:this.setState不是一个函数。(在'this.setState({questions:returnArr}')中,'this.setState'未定义)