【问题标题】:How to push data as an array of an index to firebase?如何将数据作为索引数组推送到firebase?
【发布时间】:2019-12-16 22:08:22
【问题描述】:

我有一个密钥,想将其推送到我的数据库中的特定项目,当我将项目添加到 firebase 时我使用 .push() 方法,但它不起作用,因为我需要它生成一个新密钥并在内部它添加索引

我得到了什么

--Orders
  -LASDAWWDMASDsad
  -0:"orderOne"
  -DAWKDAWKWKDKADW
  -0:"OrderTwo"
  ...

我需要什么

--Orders
  -0:"orderOne"
  -1:"orderTwo"
  -2:"orderThree"
  ...

代码

const displayTable = document.getElementById('display-table')
  ,   lipProCkBxs  = document.querySelectorAll('#lip-pro input[type=checkbox]')
  ,   tableTotal   = document.querySelector('#display-table tfoot tr td:last-child')

const {snapshotVal, uid, serviceDB} = this.state;

onPress: () => {
            let arr = [snapshotVal];
            // console.log(arr); // ["orderOne"]
            database()
              .ref(`Providers/users/${uid}`)
              .child('rejectedOrders')
              .push(arr)
              .then(
                () => console.log('Done'),
                setTimeout(() => {
                  this.props.navigation.goBack();
                }, 200),
              )
              .catch(error => console.log('@error', error));
            }

由 JS 解决:"D

我进行查询以获取拒绝订单的长度,然后当我想更新时,我只需增加长度 +1 而且效果很好:3

componentDidMount() {
  let uid = auth().currentUser.uid;

  database()
    .ref(`Providers/users/${uid}`)
    .child('rejectedOrders')
    .on('value', snapshot =>
    this.setState({arrlength: snapshot.val().length - 1}),
    );
}

onPress: () => {
  let arr = [snapshotKey];
  console.log(arr);

  let updates = {};
  // updates[Math.floor(Math.random() * 10)] = snapshotKey;
  updates[arrlength + 1] = snapshotKey;
  database()
    .ref(`Providers/users/${uid}`)
    .child('rejectedOrders')
    // .push(...arr)
    .update(updates)
    .then(...)
}

【问题讨论】:

    标签: javascript reactjs firebase firebase-realtime-database


    【解决方案1】:

    您可以使用set() 代替push()

    database()
                  .ref(`Providers/users/${uid}`)
                  .child('rejectedOrders')
                  .set(arr)
                  .then(
                    () => console.log('Done'),
                    setTimeout(() => {
                      this.props.navigation.goBack();
                    }, 200),
                  )
                  .catch(error => console.log('@error', error));
    }
    

    【讨论】:

    • 但是当我添加任何新项目时,它将用新项目替换以前的项目,我不需要这种情况
    • 它会做同样的事情:(我认为没有办法保存这样的项目?我在询问之前搜索过,但我找不到任何答案来实现我想要的
    • 检查我的问题,看看我做了什么哈哈:"D
    【解决方案2】:

    在保存之前获取数据列表并传递它['data1','data2'.....]。它将保存为 0: data1, 1: data2 .....

    firebaseDBref.set([data1, data2]);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多