Передача функции от объекта в React Native ListView

Я определяю функцию внутри объекта, а затем передаю ее в 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, поэтому подозреваю, что это проблема синтаксиса. Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны удалить жирную стрелку с TouchableOpacity onPress, как это

<TouchableOpacity onPress = {item.action}>

Это сработает.

Редактировать: Создал проект на закуску. Как видите, такой подход решает вашу проблему.

https://snack.expo.io/HJS68AjWN

Это изначально то, о чем я думал, но, к сожалению, он также ничего не делает при нажатии.

designkai 03.01.2019 19:24

Ваш item.action уже является функцией. Так что использовать его следует без жирной стрелки. Также я скопировал ваш код в свой демонстрационный проект, и он сработал. Пожалуйста, проверьте другую сторону вашего кода.

sdkcy 03.01.2019 19:30

Ах да, вы правы, спасибо! Я случайно изменил это действие до того, как убрал жирную стрелку. {item.action} отлично работает :)

designkai 03.01.2019 19:43

Другие вопросы по теме