首页 > 解决方案 > 是否可以在实际获取之前检查 onSnapshot() 是否发现了更改?

问题描述

当我导航到一个页面时,我传递了一些参数,例如“折扣”,并且我在其中显示了该数字,render()但我onSnapshot()在导航到该类的开始时正在调用。现在,我想在开始时只显示参数的值,以防有更改获取它。

PS这背后的原因是我试图尽可能减少提取次数。

 check_amount_left() {
    const getSelected = this.props.navigation.state.params;
    var ref = db().collection('discounts').where("rest_id", "==", getSelected.rest_id)
    ref.onSnapshot((querySnapshot => {
        var amount = querySnapshot.docs.map(doc => doc.data().amount);
        this.setState({
            check_for_amount: amount.toString()
        });
    }));
}

渲染方法:

render(){
  const getSelected = this.props.navigation.state.params;
   return(
     <View>
       {getSelected.amount}
     </View>
   )
}

标签: javascriptreactjsfirebasereact-nativegoogle-cloud-firestore

解决方案


要知道服务器上的数据发生了一些变化,服务器需要告诉客户端该变化。在 Firestore 的情况下,服务器总是告诉客户端文档的整个新状态。

因此,减少服务器发送给客户端的数据量的唯一方法是减少您正在收听的文档的大小。

但是如果发生这种情况,它不会减少获取次数,因为服务器需要读取文档才能知道它已经更改。


推荐阅读