13

我以前在 JS 中看到过这种语法,我只是好奇它是如何工作的。在 FlatList 的React Native Docs 中,一个示例调用了 renderItem。this._renderItem 如何知道它正在使用的单个列表项?看起来项目正在被解构,但来自什么对象?

_renderItem = ({item}) => (
    <MyListItem
        id={item.id}
        onPressItem={this._onPressItem}
        selected={!!this.state.selected.get(item.id)}
        title={item.title}
    />
);

render() {
    return (
        <FlatList
            data={this.props.data}
            extraData={this.state}
            keyExtractor={this._keyExtractor}
            renderItem={this._renderItem}
        />
    );
}

换句话说:在 FlatList 中,进行相同调用的另一种方法可能是:

<FlatList <other props> renderItem={({item}) => (<MyListItem ....) />

renderItem 是一些特殊的道具,其中 {item} 将始终是解构的 arg 吗?

4

5 回答 5

13

data prop - 需要通过data prop. 这在 this.props.data 上可用。

renderItem 道具- 然后你想用renderItem道具渲染内容。该函数被传递一个参数,它是一个对象。您感兴趣的数据位于 上,item key因此您可以使用解构从函数内访问这些数据。然后使用该数据返回一个组件。

render() {
 return (
      <FlatList
        data={this.state.data}
        renderItem={({ item }) => (
          // return a component using that data
        )}
      />
 );
}
于 2017-08-01T05:18:12.093 回答
4

除了@Balasubramanian 所说的内容之外,renderItem指向current item并且由于您使用List组件作为包装器,因此您还可以将renderItem函数内部的“ListItem”组件用于rendercurrent item数据,如下所示:

renderItem={({ item, index }) => {
  return (
     <ListItem
        key={index}
        title={item.name}
        onPress={ () => this.assetSelected(item) }
      />
  );
}
于 2018-08-14T17:20:28.413 回答
3
<FlatList
    data={['1', '2', '3', '4', '5', '6']}
    renderItem={({ item }) => (
        <Text>{ item }</Text>
    )}
/>

输出 1 2 3 4 5 6

于 2019-01-08T13:06:37.147 回答
2
 <ListItem
    data={this.state.data}
    key={(item,index)=>index.toString()}
    renderItem={({ item }) => <YourComponent item={item} /> }
  />
于 2019-08-15T21:45:55.357 回答
-1
import { places } from '../data/DataArray';

export const Home = (props) => {
    const renderPlace = ({ item }) => (
        <TouchableOpacity onPress={() => props.navigation.navigate('SingleTour')}>
            <Text style={styles.item}>{item.name}</Text>
        </TouchableOpacity>
    );
    return (
        <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
            <FlatList
                data={places}
                renderItem={
                    renderPlace
                }
            />
        </View>
    );
}
于 2020-02-28T05:10:32.907 回答