Вы можете сделать это двумя способами.
Сначала просто вызовите .reverse()
в вашем текущем массиве.Если вы вызываете метод push для добавления новых элементов, обычно это ключ, назначаемый каждой дочерней гарантии, они хранятся в хронологическом порядке.Поэтому, называя это так, должно быть достаточно:
componentDidMount() {
itemsRef.on('value', snapshot => {
let data = snapshot.val();
let items = Object.values(data);
items.rerverse();
this.setState({ items });
});
}
Хотя я не знаю, гарантируют ли let items = Object.values(data);
на каждом браузере, что ваши данные упорядочены по назначению.Кстати, Object.values()
в отличие от Object.keys()
не поддерживается во многих старых браузерах, но если вы используете его в ReactNative, тогда все в порядке.
Если вы хотите быть полностью уверенным, что он правильно упорядочен, перепишите егоэто так:
componentDidMount() {
itemsRef.on('value', snapshot => {
let items = [];
// forEach always send you the children in the right order
snapshot.forEach(snap => {
items.push(snap.val())
})
items.rerverse();
this.setState({ items });
});
}
Наконец, еще один способ сделать это, если вы не доверяете автоматически генерируемым идентификаторам firebase, это добавить объекты как таковые:
let addItem = (item, value, type) => {
db.ref('/items').push({
name: item,
value: value,
type: type,
timestamp: new Date().getTime()
});
};
и использовать firebase'sФункция orderByChild
при извлечении данных, используя timestamp
в качестве дочернего элемента, а затем .reverse()
снова, как мы делали ранее.