反应 FlatList renderItem
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 prop
将数据数组传递给 FlatList。在 this.props.data.
上可用
renderItem prop - 然后你想用 renderItem
prop 渲染内容。该函数传递一个参数,它是一个对象。您感兴趣的数据在 item key
上,因此您可以使用解构从函数内部访问它。然后 return 使用该数据的组件。
render() {
return (
<FlatList
data={this.state.data}
renderItem={({ item }) => (
// return a component using that data
)}
/>
);
}
添加到@Balasubramanian 所说的,renderItem
指向 current item
并且由于您使用 List
组件作为包装器,因此您也可以使用 'ListItem' renderItem
函数内的组件到 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>
);
}
我以前在 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 prop
将数据数组传递给 FlatList。在 this.props.data.
renderItem prop - 然后你想用 renderItem
prop 渲染内容。该函数传递一个参数,它是一个对象。您感兴趣的数据在 item key
上,因此您可以使用解构从函数内部访问它。然后 return 使用该数据的组件。
render() {
return (
<FlatList
data={this.state.data}
renderItem={({ item }) => (
// return a component using that data
)}
/>
);
}
添加到@Balasubramanian 所说的,renderItem
指向 current item
并且由于您使用 List
组件作为包装器,因此您也可以使用 'ListItem' renderItem
函数内的组件到 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>
);
}