你说得对,FlatList 是动态数据的更好解决方案。
这是一个基于您正在使用的数据的简短示例。
class MyFlatList extends React.Component {
constructor(props) {
super(props);
this.state = { data:[] };
}
async componentDidMount(){
axios.get('http://reduxblog.herokuapp.com/api/posts')
.then((response) => { this.setState({ data: response.data})});
}
_keyExtractor (item, index) {
return index.toString();
}
_renderItem ({ item, index }) {
return (<Text>{item.title} - {item.categories}</Text>);
}
render() {
return(
<FlatList style={{ flex: 1 }}
data={this.state.data}
keyExtractor={this._keyExtractor.bind(this)}
renderItem={this._renderItem.bind(this)}
horizontal={true}
/>
);
}
}
如您所见,FlatList 需要将几个道具传递给它。其中三个始终是必需的:keyExtractor、renderItem 和 data
首先是keyExtractor
用于在指定索引处为给定项目提取唯一键。
键用于缓存和作为响应键来跟踪项目重新排序
第二个renderItem。当前的 renderItem 返回一个非常简单的组件,只需花费一些时间和样式,就可以构建一些非常酷的东西。
从数据中获取一个项目并将其呈现到列表中。
数据应该通过 data 属性传递给 FlatList。您将数据存储在组件状态中,因此我们可以将其作为this.state.data 传递。 FlatList 将使用它来构造列表。
最后,我们需要将 true 传递给水平属性,以便 FlatList 将构造一个水平列表而不是垂直列表。
更多信息可以在FlatList 的文档中找到。我建议你看看那里,看看你能想出什么。
最后确保你已经从 react-native 导入了 FlatList、View 和 Text,否则你会遇到一些错误需要处理。我还会查看您的 axios 请求,因为您似乎没有发现该函数可能遇到的任何错误。