Android 如何实时订购数据
我是react native或firebase的初学者,所以我真的不知道如何解释这一点,但我不知道如何对从数据库接收的数据进行排序 假设我有一个数据库:Android 如何实时订购数据,android,firebase,react-native,firebase-realtime-database,Android,Firebase,React Native,Firebase Realtime Database,我是react native或firebase的初学者,所以我真的不知道如何解释这一点,但我不知道如何对从数据库接收的数据进行排序 假设我有一个数据库: appname items -some_random_generated_string -name: "someString" -value: "999" -type: 0 -some_random_generated_string -name: "someStr
appname
items
-some_random_generated_string
-name: "someString"
-value: "999"
-type: 0
-some_random_generated_string
-name: "someString"
-value: "999"
-type: 0
我已经尝试过所有订单类型和设置。indexOn规则,但还没有找到解决方案。还尝试添加一个id,然后用它订购,但没有找到解决方案
我猜这是访问数据库来获取项目,所以我也尝试在同一行上对它们进行排序,但除了限制数据量外,没有任何效果
let itemsRef = db.ref('items');
那么我有:
componentDidMount() {
itemsRef.on('value', snapshot => {
let data = snapshot.val();
let items = Object.values(data);
this.setState({ items });
});
}
我要补充如下:
let addItem= (item, value, type) => {
db.ref('/items').push({
name: item,
value: value,
type: type,
});
};
基本上,我想要实现的是以与添加数据相反的顺序显示数据,这样最后添加的数据将显示在顶部。您可以通过两种方式来实现 首先,只需在当前阵列上调用
.reverse()
。如果调用push方法来添加新项,通常分配给每个子项的键按时间顺序存储。因此,这样称呼应该足够好:
componentDidMount() {
itemsRef.on('value', snapshot => {
let data = snapshot.val();
let items = Object.values(data);
items.rerverse();
this.setState({ items });
});
}
虽然我不知道是否让items=Object.values(数据)代码>在每个浏览器上按预期顺序排列数据。顺便说一句,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的自动生成ID,另一种方法是添加如下对象:
let addItem = (item, value, type) => {
db.ref('/items').push({
name: item,
value: value,
type: type,
timestamp: new Date().getTime()
});
};
在获取数据时使用firebase的函数orderByChild
,使用时间戳作为子级,然后像以前一样再次使用.reverse()