Firebase在数据库中修改数据时自动刷新我的应用是否正常?因为我没有实现任何刷新,所以如果我从数据库中更改了值,我会突然回到主窗口。
我读到setState
可能会令人耳目一新。所以我故意添加以下几行:
componentDidMount = () => {
this._ismounted = true;
}
componentWillUnmount = () => {
this._ismounted = false;
}
每次我想调用setState时,我都会检查if(this._ismounted)
,但仍然会以某种方式完全刷新我的应用。
我对Firebase缺乏经验,并且很乐意接受有关此事的任何解释或反馈。
这就是我使用firebase的方式:
componentDidMount() {
this._ismounted = true;
const userId = firebase.auth().currentUser.uid;
firebase
.database().ref("users/" + userId).on("value", snapshot => {
if(this._ismounted) {
this.setState({
firstName: snapshot.child("firstName").val(),
lastName: snapshot.child("lastName").val(),
birthDay: snapshot.child("dateOfBirth").val()
}
});}
答案 0 :(得分:1)
在不查看代码的情况下回答此问题的最佳方法是让您了解firebase的基础知识。
Firebase有各种类型的监听器,有关它的详细说明可以在他们的官方文档中找到 here。如果你正在使用' on'具有“价值”的倾听者事件
database.child('/childNode').on('value', (snapshot) =>{this.setState(Object) })
以上代码将始终更改您所呼叫的状态中的数据'自动刷新'。这将继续改变您所在州的数据,直到您不分离听众
另一方面,如果你这样做
database.child('/childNode').once('value').then( (snapshot)=> { this.setState(Object)}).catch( err => console.log(err) )
这种类型的侦听器只会获取一次数据,即使您的firebase中的数据发生更改,也无法再次更新您所在州的数据。
根据您的要求,您应该选择合适的听众。在根节点上使用on值侦听器将获取数据库中的所有内容,即使在某个子节点中更改了一个小数据,而如果要继续保持数据更新,则使用一次侦听器将获取过时数据。
希望这会有所帮助。随意请求更多解释。
编辑:
参考上面的解释和你的代码(假设你只想获取一次数据而不是在数据库中更改它时再次更新它)你可以使用一次监听器。
firebase.database().ref("users/" + userId).once("value").then( (snapshot) => {
this.setState({
firstName: snapshot.child("firstName").val(),
lastName: snapshot.child("lastName").val(),
birthDay: snapshot.child("dateOfBirth").val(),
});
}