React Native - 解构 renderItem FlatList 属性中的参数项

React Native - Destructuring parameter item in renderItem FlatList attribute

提问人:GD1 提问时间:9/20/2023 更新时间:9/20/2023 访问量:31

问:

我正在通过 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 的字段,解构如何知道它需要推断项目本身?

我知道这可能是一个愚蠢的问题,但我不明白。

JavaScript ReactJS React-Native 对象 解构

评论


答:

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 的数组中的项在传递给每个调用的对象的属性上分配。请参阅文档renderItemdataFlatListdataitemrenderItem