在React Native中从Firebase获取数据

时间:2019-03-02 04:12:18

标签: reactjs firebase react-native firebase-realtime-database

我有一个具有以下结构的实时Firebase数据库:

-- places
   -- user1 uid
      -- name:
      -- latitude: 
      -- longitude:
   -- user2 uid
      -- name:
      -- latitude: 
      -- longitude:

从Firebase提取数据时,我想像这样存储它

-- user1 name
   -- latitude
   -- longitude
-- user2 name
   -- latitude
   -- longitude

目前,我有这种遍历数据的代码结构,但是我仍然坚持获取每个数据并按上面的方式进行存储。

constructor(props) {
    super(props); 
    this.state = {
      places: []
    };
  }

  componentDidMount() {
    const ref = firebase.database().ref('places/');
    ref.once('value', (snapshot) => { 
      snapshot.forEach(snapshotchild => {
        snapshotchild.forEach(data => {

        })
      })

    });
  }

1 个答案:

答案 0 :(得分:1)

查看数据表,我假设您正在以这种方式获取数据

const places = {
 user1Uid: {
  name: 'av',
  latitude: '1000',
  longitude: '1000'
 },
user2Uid: {
  name: 'we',
  latitude: '1000',
  longitude: '1000'
 }
}

如果是这样,则可以使用Array.forEachfor in甚至使用Array.reduce来操纵数据, 例如

const obj = {};
Object.keys(places).forEach(item => {
  obj[places[item].name] = {
     latitude: places[item].latitude,
     longitude: places[item].longitude
   }

});
console.log(obj);

或者如果您想使用reduce,

const newObj = Object.keys(places).reduce((accumulator, item) => Object.assign({
    [places[item].name]: {
     latitude: places[item].latitude,
     longitude: places[item].longitude
   }

 }, accumulator), {});
console.log(newObj);

您将在控制台中获得一个对象,例如

{
  "we": {
    "latitude": "1000",
    "longitude": "1000"
  },
  "av": {
    "latitude": "1000",
    "longitude": "1000"
  }
}

如果您想了解有关减少的更多信息,请访问link

快乐编码:)