【问题标题】:realtime firebase database get property name and value on child_changed实时 firebase 数据库获取 child_changed 上的属性名称和值
【发布时间】:2019-10-14 08:01:57
【问题描述】:

我正在开发实时火基数据库。 我在获取价值方面存在问题,即火力基地的变化。 我在其中发布了客户社交数据库,然后是 kkkm(这是关键),然后是不同的属性和值,我想要的是切换批准和拒绝值,例如批准:true 但我得到的只是真/假而不是属性名字。

toggleCheck = (id) => {
    var ref = firebase.database().ref('posts/'+id);
    ref.off("child_changed");
    var approval;
    ref.on("child_changed", function (data) {
      approval = data.val();
      console.log("=============================");
      console.log("The updated approval is " + approval);
    });
  }

toggleClose = (id) => {
    var ref = firebase.database().ref('posts/'+id);
    ref.off("child_changed");    
    var rejected;
    ref.on("child_changed", function (data) {
      rejected = data.val();
      console.log(ref.getKey());
      console.log(ref.getValue());
      console.log("=============================");
      console.log("The updated rejected is " + rejected);
    });
}

【问题讨论】:

    标签: reactjs firebase react-native firebase-realtime-database


    【解决方案1】:

    我不确定 100% 了解您想要做什么(“切换批准和拒绝值”?)但是,根据您问题中的代码,您可能正在寻找以下内容:

      var ref = firebase.database().ref('posts/' + id);
      ref.on('child_changed', function(data) {
        console.log(data.key);  // <-- Name of the field/node that was modified
        console.log(data.val()); // <-- Value of the field/node that was modified
        console.log("The updated" + data.key + " is " + data.val());
      });
    

    说明:

    data 是一个DataSnapshot,它有:

    1. key 属性,它是“此 DataSnapshot 位置的键(路径的最后一部分)。”
    2. val() 方法,“从 DataSnapshot 中提取 JavaScript 值”。

    根据您的评论更新

    我了解到,当 post 发生变化时,您希望同时获取 approvalrejected 节点(字段)的值。

    因此,您应该使用value 事件类型而不是child_changed 事件类型,如下所示:

      var ref = firebase.database().ref('posts/' + id);
      ref.on('value', function(data) {
        var approved = data.val().approved;
        var rejected = data.val().rejected;
    
        var object = {'approved': approved, 'rejected': rejected};
        //Do whatever you want with the object
        console.log(object);
    
      });
    

    【讨论】:

    • 我查看了卡片列表,如果用户单击某张卡片,它会批准它,并且当用户单击关闭它拒绝它并且如果卡片批准用户更改它时,这些卡片会检查并关闭 btn决定并单击关闭,然后在卡批准中更改 2 个属性:真到批准:假和拒绝:假到拒绝:真
    • client-social.web.app/#/home 我正在制作这样的应用程序检查此链接
    • 我想要像这个对象这样的数据:{approval:true/false,rejected:true/false} 现在我的代码只显示真/假而不是属性名称(批准/拒绝)。跨度>
    • 价值事件一次又一次地调用自己,我做了什么来防止这种情况发生
    • 很难准确回答,这取决于您的具体要求。您可以像最初一样使用ref.on('child_changed', function(childSnapshot, prevChildKey) {}),但这意味着您必须查询父节点以获取approvedrejected 的值,因为您在approved 或@987654341 的级别上收听@节点。或者也许你应该使用 once() 方法,它“只监听指定事件类型的一个事件,然后停止监听。”,参见firebase.google.com/docs/reference/js/…
    猜你喜欢
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多