Я определяю функцию внутри объекта, а затем передаю ее в ListView.
Однако у меня возникают проблемы с запуском функции onPress. На данный момент при нажатии ничего не делает.
export default class Settings extends Component {
componentWillMount() {
const ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 })
const listItems = [
{ title: 'Profile', icon: 'ios-contact', action: () => console.info('Profile') },
{ title: 'Log out', icon: 'ios-log-out', action: () => console.info('Log out') }
]
this.setState({ dataSource: ds.cloneWithRows(listItems) })
}
render() {
return (
<ListView
dataSource = {this.state.dataSource}
renderRow = {(item) =>
<TouchableOpacity onPress = {() => item.action}>
<View>
<Ionicons name = {item.icon} size = {20} />
<Text>{item.title}</Text>
</View>
</TouchableOpacity>
}
/>
)
}
};
Я новичок в React / JS, поэтому подозреваю, что это проблема синтаксиса. Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны удалить жирную стрелку с TouchableOpacity onPress, как это
<TouchableOpacity onPress = {item.action}>
Это сработает.
Редактировать: Создал проект на закуску. Как видите, такой подход решает вашу проблему.
https://snack.expo.io/HJS68AjWN
Ваш item.action уже является функцией. Так что использовать его следует без жирной стрелки. Также я скопировал ваш код в свой демонстрационный проект, и он сработал. Пожалуйста, проверьте другую сторону вашего кода.
Ах да, вы правы, спасибо! Я случайно изменил это действие до того, как убрал жирную стрелку. {item.action} отлично работает :)
Это изначально то, о чем я думал, но, к сожалению, он также ничего не делает при нажатии.