我的平面列表是一个无状态的组件,当项目被按下时,我想通过调用方法“handleOnPress”来处理onPress。我该怎么做呢?下面是示例代码。
'
handleOnPress = () => {
.....
}
<SampleListView
data={prop.data}
onPress={this.handleOnPress}
/>
const SampleListView = (props: Props) => {
return (
<FlatList
style={styles.container}
data={props.data}
keyExtractor={item => item.id.toString()}
renderItem={renderItem}
/>
)
}
renderItem = ({ item }: { item: DataSample }) => {
return (
<TouchableWithoutFeedback onPress={ () => props.onPress}>
....
</TouchableWithoutFeedback>
)
}
'
3条答案
按热度按时间e4eetjau1#
你能试试这个吗?
请注意这两个链接。
https://facebook.github.io/react-native/docs/flatlist
TouchableWithoutFeedback with custom component inside doesn't fires onPress callback
不同之处在于,将callback作为参数并添加View层。
qyuhtwio2#
您的代码的问题是这个
onPress={props.onPress}
您的renderItem
函数不知道( prop )它所知道的是传递给它的项目参数。如果你这么做
通过数据传递onPress函数,或者在构造函数中绑定
renderItem
函数,然后调用zaqlnxep3#
因此,基本上在“renderItem”中,你传递的组件将被分配给每个“item”迭代。例如,你有博客文章数据,“renderItem”组件将表示每个文章(item)的布局。
这意味着您可以在该组件上设置onPress(例如〈SomeComponent onPress={()=〉pressHandler()} /〉),并将处理函数传递给此onPress属性。
您甚至可以将参数传递给此处理程序,例如:
请记住,您的数据对象需要有这个“id”或“_id”或“uid”或其他东西,但您肯定需要从“item”对象引用这个“id”,因为您正在迭代的数据的每个示例都会自动Map到“item”对象。
一旦它被传递给子组件(SomeComponent /〉),您就可以像这样访问它:
除了Pressable,你可以尝试其他的东西,但我发现onPress on View可能无法正常工作,而“Pressable”将在你的应用程序中更具未来性。