RN TouchableOpacity onPress не вызывает функцию

.map визуализирует TouchableOpacity с помощью функции showHide в реквизите onPress. Все хорошо отображается, но когда я нажимаю один из TouchableOpacity, ничего не происходит.

Я пробовал много разных вещей:
onPress={this.showHide}
onPress={() => this.showHide}
this.showHide = this.showHide.bind(this)
<ScrollView keyboardShouldPersistTaps="always">

Вот мой код:

constructor(props) {
    super(props)
    this.state = { show: false }
    console.log(this.state.show)
    // this.showHide = this.showHide.bind(this)
}

showHide() {
    console.log(this.state.show)
    console.log("**************************************************************")
    alert("SUCCESS !")
    /*this.setState({
        show: !this.state.show
    })*/
    console.log(this.state.show)
}

render() {
    const cards = datas.cards
    return (
        <ScrollView style={styles.scroll}>
            {
                cards.map(function(card, i) {
                    const keys = Object.keys(card)
                    const values = Object.values(card)
                    return(
                        <View key={i}>
                            <TouchableOpacity style={styles.titleView} key={i} onPress={this.showHide}>
                                <Text style={styles.titleText}>{card.title}</Text>
                            </TouchableOpacity>
                                {
                                    keys.map(function(key, j) {
                                        if(key != "title") {
                                            return(
                                                <View style={styles.row} key={j}>
                                                    <Text style={styles.titleCell} textStyle={styles.text}>{key}</Text>
                                                    <Text style={styles.valueCell}>{values[j]}</Text>
                                                </View>
                                            )
                                        }
                                    })
                                }
                        </View>
                    );
                })
            }
        </ScrollView>
    )
}

person Ariel Munera    schedule 01.03.2019    source источник
comment
Попробуйте изменить объявление showHide() на showHide = () => , а также измените .map(function(card, i) на .map((card, i) =>.   -  person Andrew    schedule 01.03.2019
comment
Что произойдет, если вы сделаете onPress={() => alert('Test!')} ?   -  person Lucas Bustamante    schedule 01.03.2019
comment
Я изменил showHide() на showHide = () =>, .map(function(card, i) на .map((card, i) => и onPress={this.showHide()} на onPress={() => this.showHide()}, и теперь это работает. Я думаю, что такая ошибка довольно распространена, но я никогда не думал об этом. Спасибо за вашу помощь   -  person Ariel Munera    schedule 01.03.2019
comment
это решено?   -  person Jitender Dev    schedule 12.04.2021
comment
С тем, что я сказал в своем сообщении от 1 марта 2019 в 13:38, это было решено, да.   -  person Ariel Munera    schedule 19.05.2021