Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在实际获取之前,是否可以检查onSnapshot()是否已发现更改?_Javascript_Reactjs_Firebase_React Native_Google Cloud Firestore - Fatal编程技术网

Javascript 在实际获取之前,是否可以检查onSnapshot()是否已发现更改?

Javascript 在实际获取之前,是否可以检查onSnapshot()是否已发现更改?,javascript,reactjs,firebase,react-native,google-cloud-firestore,Javascript,Reactjs,Firebase,React Native,Google Cloud Firestore,当我导航到一个页面时,我会传递一些参数,例如“折扣”,并在render()中显示该数字,但我会在导航到该类的开始时调用onSnapshot()。现在,我只想在begin中显示参数的值,以防有更改 另外,这背后的原因是我正试图尽可能减少回迁次数 check_amount_left() { const getSelected = this.props.navigation.state.params; var ref = db().collection('discounts').wh

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

另外,这背后的原因是我正试图尽可能减少回迁次数

 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>
   )
}
render(){
const getSelected=this.props.navigation.state.params;
返回(
{getSelected.amount}
)
}

要知道服务器上的数据发生了更改,服务器需要将该更改告知客户端。对于Firestore,服务器总是告诉客户端文档的整个新状态

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


但如果发生事件,则不会减少回迁次数,因为服务器需要读取文档才能知道它已更改。

要知道服务器上的数据发生了更改,服务器需要将该更改告知客户端。对于Firestore,服务器总是告诉客户端文档的整个新状态

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


但如果发生此事件,则不会减少回迁次数,因为服务器需要阅读文档才能知道文档已更改。

谢谢您的回答!那么,这是否意味着使用onSnapshot()侦听特定字段的更改将花费与获取整个文档相同的成本?您不能侦听特定字段,只能侦听整个文档。无论文档大小如何,读取文档的成本都是相同的,但是对于较小的文档,您会看到较少的带宽成本。我如何计算带宽成本?在Firebase网站上找不到它。你必须估计它的大小。或者(因为你在网上),你可以通过查看浏览器中的“网络”选项卡获得一个非常好的想法。不,我的应用程序是基于React Native构建的。估计一下尺寸?mb/gb的交易有价格吗?谢谢你的回答,弗兰克!那么,这是否意味着使用onSnapshot()侦听特定字段的更改将花费与获取整个文档相同的成本?您不能侦听特定字段,只能侦听整个文档。无论文档大小如何,读取文档的成本都是相同的,但是对于较小的文档,您会看到较少的带宽成本。我如何计算带宽成本?在Firebase网站上找不到它。你必须估计它的大小。或者(因为你在网上),你可以通过查看浏览器中的“网络”选项卡获得一个非常好的想法。不,我的应用程序是基于React Native构建的。估计一下尺寸?mb/gb的交易是否有价格?