为了账号安全,请及时绑定邮箱和手机立即绑定

React+Firebase:如何将列表数据添加到 Firebase 实时数据库中

React+Firebase:如何将列表数据添加到 Firebase 实时数据库中

FFIVE 2021-12-23 14:20:51
我正在使用 react 和 firebase 实时数据库。我想为每个用户创建一个列表。稍后在存储中查找文件的 id 列表。在这种情况下,生成和添加 id 以在数据库中列出的最佳方法是什么?(不是数据列表,数据库中存储的数据就是列表)所以我想到了两种方法。我会写伪代码//Method 1//get id listreceivedList = getKeyListFromDB()//generate IDnewID = generateID()// append new idreceivedList.append(newID)//set value with updated listupdateDB(receivedList)//Method 2// Using the list provided by the firebasenewRef = firebase.database().ref().child('pathToList').push()newRef.set({      key: newRef.key    })我打算使用方法 1,但找不到生成 id 的方法。检索列表以更新它似乎效率低下。所以我试图找到另一种方法。但我找不到一个好的方法来做到这一点。将值添加到数据库中的列表的解决方案我已经使用事务方法解决了。但如果有办法通过使用解决,push请回答。
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

Firebase 具有push()将子节点添加到列表的内置操作的原因有很多。事实上,您已经在问题中听到了其中之一:

检索列表以更新它似乎效率低下

其他原因是推送 ID 在您的应用处于离线状态时仍然有效,并且它们可以在多个用户之间更好地扩展。

如果您想详细了解为什么应该使用push(),请阅读最佳实践:Firebase 中的数组


查看完整回答
反对 回复 2021-12-23
?
开满天机

TA贡献1786条经验 获得超13个赞

首先,您可以使用以下代码生成唯一键


const newID = firebase.database.ref().push().key

根据此答案,每当您对数据库引用使用推送时,都会使用包含服务器时间戳的唯一键生成一个新数据节点。这些键看起来像 -KiGh_31GA20KabpZBfa。


由于时间戳的存在,您可以确定给定的键是唯一的,而无需检查数据库中的其他键。


其次,您可以使用 将项目添加到数据库中的列表中transaction。


const newID = firebase.database.ref().push().key

//user is user object from firebase auth module

const newDatabaseRouteRef = firebase.database.ref().child('users/' + user.uid + '/ids')

// if null, create a new list with id, if not add newID to list

newDatabaseRouteRef.transaction((currentValue) => {

  return currentValue ? currentValue.push(newID) : [newID]

})


查看完整回答
反对 回复 2021-12-23
?
白衣非少年

TA贡献1155条经验 获得超0个赞

我正在创建另一个答案只是为了展示不同类型的解决方案。这个解决方案,使用push比使用更好transaction。


// Get a new ref by push

const newDatabaseRouteRef = firebase.database.ref().child('users/' + user.uid + '/routes').push()

// Set the value to the key of received ref

newDatabaseRouteRef.set(newDatabaseRouteRef.key)

这更好,因为


事务需要多次往返,而 push() 不需要,从而减少时间。

根据这篇文章更安全。

这实现了相同的结果,因为即使使用列表,当列表保存在 firebase 数据库中时,它也被存储为对象。 ex) ["a","b","c"] => {0:"a",1:"b",2:"c"}


查看完整回答
反对 回复 2021-12-23
  • 3 回答
  • 0 关注
  • 248 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号