【发布时间】:2020-04-20 03:19:25
【问题描述】:
我在多个地方看到人们将侦听器代码放在componentDidMount 中,但是,我想知道它是如何工作的,因为componentDidMount 只被调用一次,因此它应该只获取一次。当 Firestore 发生更改时,它如何再次获取?
示例代码:
componentDidMount() {
if(this.state.screen === 7){
var query = firestore().collection('Collection').doc().collection('subcollection');
query = query.where('act', '==', 1);
query = query.where('city', '==', this.state.selected_city);
query = query.orderBy('update_time', 'desc');
query = query.limit(10);
query.onSnapshot({
error: (e) => this.setState({ errorMessage: e, refreshingPatients: false }),
next: (querySnapshot) => {
var dataSource = querySnapshot.docs.map(doc => { return { ...doc.data(), doc_id: doc.id } });
var lastVisiblePatient = dataSource[dataSource.length - 1].doc_id;
this.setState({
dataSource: dataSource,
lastVisiblePatient: lastVisiblePatient,
refreshingPatients: false,
});
},
});
}
}
编辑:添加示例代码。我想一直听 Firestore DB 的变化。这是正确的做法吗?如果是,它是如何工作的,因为componentDidMount 只被调用一次?
注意:我只在屏幕状态设置为 7 时才收听 Firestore。
【问题讨论】:
-
也许您可以编辑问题以显示您感到困惑的代码示例?不要让我们猜测您在说什么。请务必查找可能取消注册侦听器的类似代码。
-
@DougStevenson 抱歉,我刚刚编辑并添加了示例代码。如果问题仍然不清楚,请告诉我。
-
是的,componentDidUpdate 是个不错的选择
-
你也用其他地方的一些值来设置你的初始状态吗?
-
@O.o 当应用程序启动时,我将状态设置为 0,稍后我将状态设置为 7,因此很明显
componentDidMount中的代码永远不会从数据库中获取。
标签: javascript firebase react-native google-cloud-firestore