提问人:GD1 提问时间:9/20/2023 更新时间:9/20/2023 访问量:31
React Native - 解构 renderItem FlatList 属性中的参数项
React Native - Destructuring parameter item in renderItem FlatList attribute
问:
我正在通过 React Native 移植一个 ReactJS 项目,我正在尝试学习 Native 的组件。我想在从 Musixmatch 和 Spotify 获取数据后显示跟踪卡的列表/序列。
在 ReactJS 中,我会渲染这个:
反应JS
return (
<>
<h1 id="top10tracksitalyheader">Top 10 popular tracks in Italy</h1>
<div className="toptentracks">
{ topTenTracks.map((track) => {return <TrackPreview data={track.data} key={track.data.id} album={track.album}/>}) }
</div>
</>
);
反应原生
return (
<View style={styles.container}>
<Text style={styles.topTenTracksTitle}>This is the TopTenTracks Component.</Text>
<FlatList
data={topTenTracks}
keyExtractor={(item) => item.data.id}
renderItem={({ item }) => (
<TrackPreview data={item.data} album={item.album} />
)}
horizontal
showsHorizontalScrollIndicator
pagingEnabled
/>
</View>
我绝对对 renderItem 函数中的 {item} 解构感到困惑。我读到FlatLine期望一个数组作为数据属性,而topTenTracks确实是一个数组,更准确地说是一个对象数组。这当然对 ReactJS 代码块中的 .map() 方法没有问题。 但是 React Native 的 renderItem 呢?我读到它需要一个 Object 作为其函数参数,而 item 确实是一个 Object,因为 topTenTracks 是一个 Objects 数组。 那么为什么需要解构呢?另外,如果“item”不是 topTenTracks 中 Objects 的字段,解构如何知道它需要推断项目本身?
我知道这可能是一个愚蠢的问题,但我不明白。
答:
1赞
Wing
9/20/2023
#1
的签名如下所示:renderItem
renderItem({
item: ItemT,
index: number,
separators: {
highlight: () => void;
unhighlight: () => void;
updateProps: (select: 'leading' | 'trailing', newProps: any) => void;
}
}): JSX.Element;
React Native 调用其他数据片段,而不仅仅是传递给 prop 的数组中的项目。因此,传递给 prop 的数组中的项在传递给每个调用的对象的属性上分配。请参阅文档。renderItem
data
FlatList
data
item
renderItem
上一个:从对象中删除项目而不转换数组
评论