【发布时间】:2018-06-08 20:36:26
【问题描述】:
从 Firebase 读取数据时,我似乎与 setState 存在某种竞争条件。在加载组件时,侦听器child_added 被调用,与表clients 中的客户端记录一样多,但实际上只有最后一个客户端记录存储在使用setState 的状态中。我知道这与 setState 中的滞后有关,它仅在循环结束后才起作用,因此存在多个 setState 调用的竞争条件。如何解决此问题,以便所有客户端记录都正确存储在 this.state.clients 中?
class ClientsTable extends React.Component {
constructor(props) {
super(props);
this.state = {
open: false,
clients: [],
};
}
componentWillMount(){
let clientsRef = fire.database().ref('clients').orderByKey().limitToLast(100);
clientsRef.on('child_added', snapshot => {
let client = snapshot.val();
client.id = snapshot.key
this.setState({ clients: [client].concat(this.state.clients) })
})
}
}
【问题讨论】: