snapshot.forEach(function(childSnapshot) {
groupRef.child(childSnapshot.key).once("value", (snap) => {
this.setState.bind({
expenses: this.state.expenses.concat(snap.val()),
});
})
})
我得到的错误是
undefined is not an object (evaluating '_this2.setState')
状态已通过以下方式声明
constructor(props) {
super (props);
this.state = {
expenses: [],
};
}
答案 0 :(得分:5)
这是因为您没有正确调用或使用绑定,并且引用的this
在通过使用传统函数回调调用forEach创建的上下文中是不同的。要绑定的第一个参数是上下文而不是参数。
在这种情况下,只需避免使用箭头功能,这样this
仍然是您的组件参考。
snapshot.forEach((childSnapshot) => {
groupRef.child(childSnapshot.key).once("value", snap =>
this.setState(state => ({ expenses: [ ...state.expenses, snap.val()] }))
);
});
请注意,在引用现有状态时,应使用上述setState的回调样式,因为setState在设置状态时是异步的,尤其是在异步回调中设置循环时,状态可能已更改。