reactjs React js中Firebase实时数据库对象数组的更新

u59ebvdq  于 2022-12-26  发布在  React
关注(0)|答案(1)|浏览(87)

我在Firebase中更新实时数据库中对象数组的某些属性时遇到了问题。
我的对象看起来像下面(见图片)。
现在我想更新第二个参与者对象的IsComing属性。

目前我使用updateIsComming()函数,但这不是很有说服力,因为我必须重写整个对象。

function updateIsComming() {
   
    const db = getDatabase();
    update(ref(db, " your_path/EventModel/" + modelkey ), {
      Location: "London",
      Participants: [
        { Name: "Bella2", IsComming: "true" },
        { Name: "Tom", IsComing: "true" },
      ],
    });

相反,我只想从数组中引用特定的prop。
参与者[1].IsComming =假;
有什么方法可以直接访问对象的特定数组。

tf7tbtn2

tf7tbtn21#

Firebase Realtime Database中不建议使用数组作为数据结构,要了解原因,我建议阅读Best Practices: Arrays in Firebase
这样做的原因之一是需要读取数组来确定要更新的项的索引。
1.从数据库读取数组。
1.在应用程序代码中更新数组中的必要项。
1.将更新的数组写回数据库。
正如您已经发现的那样,这并不理想,因为这在NoSQL数据库中很常见,所以请考虑一种更适合该用例的替代数据结构。
在这种情况下,要考虑的替代数据结构是:

Participants: {
  "Bella2": true,
  "Tom": true
}

在这里,我们使用参与者的姓名作为关键字,这意味着:

  • 每个参与者在对象中只能出现一次,因为对象中的键根据定义是唯一的。
  • 现在,您可以使用以下命令按名称更新用户的状态:update(db, "your_path/EventModel/" + modelkey + "/Participants/Tom", false).

相关问题