在我的应用程序中,我正在使用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))
我认为在你已经让它进入状态之后再做并不是最好的方法。因此,在使用
只需检查事件是否不是数组,即可将其返回到数组中:
....
data={Array.isArray(this.state.events)
? this.state.events
: [this.state.events]}
....