繁体   English   中英

反应 FlatList 渲染项

[英]React FlatList renderItem

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

_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 吗?

data prop - 需要通过data propdata prop数组传递给FlatList 这在 this.props.data 上可用。

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

render() {
 return (
      <FlatList
        data={this.state.data}
        renderItem={({ item }) => (
          // return a component using that data
        )}
      />
 );
}

添加@Balasubramanian 所说的内容, renderItem指向current item并且由于您使用List组件作为包装器,因此您还可以使用renderItem函数内的“ListItem”组件来render current item的数据,如下所示:

renderItem={({ item, index }) => {
  return (
     <ListItem
        key={index}
        title={item.name}
        onPress={ () => this.assetSelected(item) }
      />
  );
}
<FlatList
    data={['1', '2', '3', '4', '5', '6']}
    renderItem={({ item }) => (
        <Text>{ item }</Text>
    )}
/>

输出 1 2 3 4 5 6

 <ListItem
    data={this.state.data}
    key={(item,index)=>index.toString()}
    renderItem={({ item }) => <YourComponent item={item}> }
  />
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>
    );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM