猿问

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

我正在使用 react 和 firebase 实时数据库。我想为每个用户创建一个列表。稍后在存储中查找文件的 id 列表。在这种情况下,生成和添加 id 以在数据库中列出的最佳方法是什么?(不是数据列表,数据库中存储的数据就是列表)


所以我想到了两种方法。我会写伪代码


//Method 1

//get id list

receivedList = getKeyListFromDB()

//generate ID

newID = generateID()

// append new id

receivedList.append(newID)

//set value with updated list

updateDB(receivedList)


//Method 2

// Using the list provided by the firebase

newRef = firebase.database().ref().child('pathToList').push()

newRef.set({

      key: newRef.key

    })

我打算使用方法 1,但找不到生成 id 的方法。检索列表以更新它似乎效率低下。所以我试图找到另一种方法。但我找不到一个好的方法来做到这一点。


将值添加到数据库中的列表的解决方案


我已经使用事务方法解决了。但如果有办法通过使用解决,push请回答。


FFIVE
浏览 249回答 3
3回答

不负相思意

Firebase 具有push()将子节点添加到列表的内置操作的原因有很多。事实上,您已经在问题中听到了其中之一:检索列表以更新它似乎效率低下其他原因是推送 ID 在您的应用处于离线状态时仍然有效,并且它们可以在多个用户之间更好地扩展。如果您想详细了解为什么应该使用push(),请阅读最佳实践:Firebase 中的数组。

开满天机

首先,您可以使用以下代码生成唯一键const newID = firebase.database.ref().push().key根据此答案,每当您对数据库引用使用推送时,都会使用包含服务器时间戳的唯一键生成一个新数据节点。这些键看起来像 -KiGh_31GA20KabpZBfa。由于时间戳的存在,您可以确定给定的键是唯一的,而无需检查数据库中的其他键。其次,您可以使用 将项目添加到数据库中的列表中transaction。const newID = firebase.database.ref().push().key//user is user object from firebase auth moduleconst newDatabaseRouteRef = firebase.database.ref().child('users/' + user.uid + '/ids')// if null, create a new list with id, if not add newID to listnewDatabaseRouteRef.transaction((currentValue) => {  return currentValue ? currentValue.push(newID) : [newID]})

白衣非少年

我正在创建另一个答案只是为了展示不同类型的解决方案。这个解决方案,使用push比使用更好transaction。// Get a new ref by pushconst newDatabaseRouteRef = firebase.database.ref().child('users/' + user.uid + '/routes').push()// Set the value to the key of received refnewDatabaseRouteRef.set(newDatabaseRouteRef.key)这更好,因为事务需要多次往返,而 push() 不需要,从而减少时间。根据这篇文章更安全。这实现了相同的结果,因为即使使用列表,当列表保存在 firebase 数据库中时,它也被存储为对象。 ex) ["a","b","c"] => {0:"a",1:"b",2:"c"}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答