Попробуйте инициировать ваше состояние с пустым списком, например:
this.ds = new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2
});
this.state = {
dataSource: this.ds.cloneWithRows([]),
isLoading: true
};
Обратите внимание на пустое значение []
внутри функции cloneWithRows
.
Затем создайте новый массив и, когдаВы извлекаете данные, помещаете их в новый массив и обновляете состояние методом Object.assign
.Как то так:
fetchGroups() {
var dataObject = []
firebase.database().ref('groups/numbers').once("value", (snap) => {
snap.forEach((snapshot) => {
firebase.database().ref('groups/' + snapshot.val()).once('value').then((snapshot) => {
getparticipant = snapshot.val().participant;
var instantSpace;
switch (true) {
case (getparticipant <= 3):
instantSpace= snapshot.val().spaceOne
break;
case (getparticipant <= 10):
instantSpace= snapshot.val().spaceTwo
break;
case (getparticipant <= 20):
instantSpace= snapshot.val().spaceThree
break;
case (getparticipant > 20):
instantSpace= snapshot.val().spaceFourth
break;
}
dataObject.push({
title: snapshot.val().type + ' ' + snapshot.val().brand,
groupId: snapshot.val().groupID,
description: snapshot.val().model,
icon: snapshot.val().icon,
partners: snapshot.val().participant,
finalDate: snapshot.val().timeMerge,
price: instantPrice,
photo: snapshot.val().adminPhoto
});
// Update the state
this.setState({
dataSource: this.ds.cloneWithRows(Object.assign({}, dataObject))
});
});
});
});
}