【问题标题】:Decrementing value in firebase using react native使用本机反应减少firebase中的值
【发布时间】:2021-04-08 03:51:16
【问题描述】:

单击按钮时,我正在尝试减少 Firebase 实时数据库中的 Quantity 值。但是,我尝试了多种方法仍然无法减少该值。下面列出的是结构的样子。

const database = [
  {
    Name: "Coca Cola",
    Price: "1.75",
    Quantity: "66",
  },
  {
    Name: "HaagenDaz",
    Price: "3.99",
    Quantity: "5",
  },
  {
    Name: "Trident",
    Price: "1.85",
    Quantity: "10",
  },
  {
    Name: "kitkat",
    Price: "1.20",
    Quantity: "100",
  },
];

我用来将 Trident 的 Quantity 值减为 9 的方法之一是:Quantity: firebase.firestore.FieldValue.increment(-1) 结果是:

{
  "Name": "Trident",
  "Price": "1.85",
  "Quantity": {
    "d_": {
      "J_": -1,
      "_methodName": "FieldValue.increment"
    }
  }
}

预期的结果应该是:

{
  Name: "Trident", 
  Price: "1.85", 
  Quantity: "9"
}

我把代码贴在下面:

Object.values(this.state.mylist).map((key) => {
  const target = key;
  const string = this.state.paredString;

  console.log("Quantity:", target.Quantity);
  // const ref_forUpdate = firebase.database().ref("Product Name");
  // const decrement = firebase.firestore.FieldValue.increment(-1);

  const name = target.Name;
  const qty = target.Quantity;
  // const decrement = firebase.firestore.FieldValue.increment(-1);
  for (let i = 0; i < string.length; i++) {
    if (target.Name == string[i]) {
      // let temp = target.Quantity
      firebase
        .database()
        .ref("Product Name/" + name)
        .update({
          // Quantity:  firebase.firestore.FieldValue.increment(-1) //<------ creates a new sub-branch under Quantity
          // Quantity: qty - 1 ,  <------ Quantity in realtime database keeps decreasing without stopping
        });
      console.log("Matched:", target);
    } else {
      console.log("Not_matched2");
    }
  }
  console.log("\n");
});

【问题讨论】:

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


    【解决方案1】:

    您正在使用 Firestore 的运算符,但正在写入实时数据库。虽然这两个数据库都是 Firebase 的一部分,并且都支持原子增量/减量,但 API 是不同的。

    对于实时数据库,该字段名为ServerValue.increment(),因此:

    firebase.database().ref("Product Name/" + name).update({
      Quantity: ServerValue.increment(-1)
    })
    

    【讨论】:

    • 感谢您的帮助,我能够降低价值,但我一直遇到的问题是它只是不断降低价值而没有停止。
    • 非常感谢它帮助我解决了这个问题。
    猜你喜欢
    • 2019-06-01
    • 2019-03-18
    • 2021-09-19
    • 2020-12-22
    • 1970-01-01
    • 2019-02-01
    • 2018-09-26
    • 2018-02-28
    • 2020-02-09
    相关资源
    最近更新 更多