В моем приложении я получаю свои данные с помощью axios. Как мы знаем, мы не можем отображать данные в FlatList как объект, это должен быть массив. Когда я выбираю свои данные с сервера, если это отдельный элемент, это объект, если их больше одного, он возвращает меня в виде массива. Как я могу показать свой единственный элемент в плоский список?
государство:
state = {
events: [],
isLoading: true,
errorCode: null,
errorMessage: null,
}
мой экземпляр плоского списка;
let events = <FlatList
style={{ backgroundColor: 'white', height: '100%', width: '100%' }}
data={this.state.events}
keyExtractor={(x, i) => i.toString()}
ListEmptyComponent={this.dataEmpty}
renderItem={({ item }) => {
return <EventsList
startDate={item.startDate}
headLine={item.eventName}
description={item.location}
endDate = {item.endDate}
/>;
}}
/>;
Я хотел бы убедиться, что данные являются массивом, прежде чем вы сохраните их в состояние, если не изменить его в массив. Array.isArray()
- это правильный способ проверить, является ли что-либо массивом. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
Можно создать простую функцию
let result1 = {id: 1}; // object result
let result2 = [{id:1}, {id: 2}] // array result
function checkData (result) {
if (Array.isArray(result)) {
return result
} else {
return [result]
}
}
console.log(checkData(result1))
console.log(checkData(result2))
Я думаю, что делать это после того, как вы уже ввели его в состояние, не лучший способ. Таким образом, вы, вероятно, хотите сделать что - то подобное в вашем axios
вызова, прежде чем использовать setState
Просто проверьте, если события не являются массивом, верните его в массив:
....
data={Array.isArray(this.state.events)
? this.state.events
: [this.state.events]}
....