Javascript 如何在React Native中将Firebase实时数据库数据值增加一个?
我有一个像这样的Firebase实时数据库Javascript 如何在React Native中将Firebase实时数据库数据值增加一个?,javascript,firebase,react-native,firebase-realtime-database,Javascript,Firebase,React Native,Firebase Realtime Database,我有一个像这样的Firebase实时数据库 let arr = ['myKey1' , 'myKey2' , 'myKey3'] try { for(let i=0; i<arr.length; i++) { let ref = firebase.database().ref(myRoot).child(arr[i]); ref.transaction( function(myValue) { return (myValue || 0) + 1;
let arr = ['myKey1' , 'myKey2' , 'myKey3']
try {
for(let i=0; i<arr.length; i++) {
let ref = firebase.database().ref(myRoot).child(arr[i]);
ref.transaction( function(myValue) {
return (myValue || 0) + 1;
})
}
this.props.navigation.goBack();
}
catch(error) {
console.log(error));
}
myRoot
|---我的钥匙1
|--我的价值:1
|
|---我的钥匙2
||--myValue:0
|
|---我的钥匙3
|---myValue:2
我需要将所有这些值增加一,并得到以下输出
myRoot
|---我的钥匙1
|--我的价值:2
|
|---我的钥匙2
|--我的价值:1
|
|---我的钥匙3
|---myValue:3
如何使用循环来实现这一点?或者,在React Native中实现这一点的最佳方法是什么
我真正想要的是这个。让我们想想,我有一个主屏幕。它有一个叫做“列表值”的按钮。单击后,我导航到下一个页面(堆栈导航器),在那里,它显示myKey1、myKey2和myKey3的值。这是一个单一列表。让我们假设在第二个sreen中有一个称为“增量值”的按钮。当我按下它时,我想增加值并导航回主屏幕
我试过这样的东西
let arr = ['myKey1' , 'myKey2' , 'myKey3']
try {
for(let i=0; i<arr.length; i++) {
let ref = firebase.database().ref(myRoot).child(arr[i]);
ref.transaction( function(myValue) {
return (myValue || 0) + 1;
})
}
this.props.navigation.goBack();
}
catch(error) {
console.log(error));
}
让arr=['myKey1','myKey2','myKey3']
试一试{
对于(让i=0;i注意您正在调用:。然后(()=>this.props.navigation.goBack());
在每次迭代中。我认为您需要使用runTransaction
,如中所述
示例适用于以下结构:
myRoot
|--- mykey1: number
对于这样的结构:
myRoot
|--- mykey1
| |---myValue: number
您应该使用下一个const ref
声明:
const ref = db.ref(myRoot).child(key).child('myValue');
样品火库
示例实时数据库
谢谢你的回复。不幸的是,这不起作用。没有更新值。还有其他解决方案吗?我已经更新了我尝试过的代码。尽管如此,它仍然可以正常工作,并按照我的预期更改值。但是,请给出相同的黄色警告。很抱歉,我在回答时考虑了Firestore。我刚刚使用了一个版本,使用您的代码进行了编辑,该版本将等待所有更改承诺已经完成。我也尝试了这段代码。但是,它不起作用。执行后,数据库被更改为这样。myKey1:“[object object]1”myKey2:“[object object]1”myKey3:[object object]1”
这是因为您的更新代码是针对结构的myRoot->myKeyN->number
。如果您的数据库结构是myRoot->myKeyN->myValue->number
,它将显示您的结果。要使用第二个结构实现您想要的结果,您应该将child('myValue')
附加到const ref=db.ref(myRoot).child(键);
const arr = ['myKey1' , 'myKey2' , 'myKey3'];
const db = firebase.database();
Promise.all(arr.map(key => {
const ref = db.ref(myRoot).child(key);
return ref.transaction(function(myValue) {
return (myValue || 0) + 1;
})
}))
.then(() => this.props.navigation.goBack())
.catch((error) => console.log(error))