【问题标题】:Is it possible to check if onSnapshot() has found changes before actually fetching?是否可以在实际获取之前检查 onSnapshot() 是否发现了更改?
【发布时间】:2020-01-31 17:58:40
【问题描述】:

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

附:这背后的原因是我试图尽可能减少获取次数。

 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>
   )
}

【问题讨论】:

    标签: javascript reactjs firebase react-native google-cloud-firestore


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢弗兰克的回答!那么,这是否意味着使用 onSnapshot() 来侦听特定字段的更改,与获取整个文档的成本相同?
    • 不能监听特定字段,只能监听整个文档。文档读取的成本与文档大小无关,但当然对于较小的文档,您会看到更少的带宽成本。
    • 如何计算带宽成本?在 Firebase 站点中找不到它
    • 您必须估计大小。或者(因为您在网络上)您可以通过检查浏览器中的网络选项卡来获得一个不错的主意。
    • 不,我的应用是基于 React-Native 构建的。估计尺寸? mb/gb 的交易有价格吗?
    猜你喜欢
    • 2017-02-27
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多