按状态Firebase获取订单

时间:2017-12-22 21:52:37

标签: javascript reactjs firebase firebase-realtime-database

使用React和Firebase的商务

我需要获得状态为“暂停”的所有订单,因此我执行了以下操作:

JS

    const ordersRef = firebase.database().ref('/orders');

    let orders = [];

    ordersRef.on('child_added', snap => {
      if (snap.val().status.state === 'on-hold') {
        orders = [
          {
            ...snap.val(),
            id: snap.key
          }, 
          ...orders
        ];
        this.setState({loading:false, orders: orders});
      }
    })

这是有效的,唯一的问题是,如果没有订单'暂停','加载'状态永远不会改变。

firebase数据库看起来像:

orders: {
  ...
  id: {
    ...
    status: {
      ...
      state: 'on-hold'
    }
  }
}

1 个答案:

答案 0 :(得分:2)

您将需要使用查询(仅获取保留的订单)和value侦听器(以确保在没有处于暂停状态的订单时也会调用)。

const ordersRef = firebase.database().ref('/orders');

let orders = [];

ordersRef.orderByChild("status/state").equalTo("on-hold").on('value', snapshot => {
  orders = [];
  snapshot.forEach((snap) => {
    orders.push({ ...snap.val(), id: snap.key });
  })

  this.setState({loading:false, orders: orders});
})