Установите cancelsTouchesInView
вашего распознавателя на значение false. В противном случае он «потребляет» прикосновение для себя и не передает его в виде таблицы. Вот почему событие выбора никогда не происходит.
, например, в swift
let tapOnScreen: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "CheckTheTime")
tapOnScreen.cancelsTouchesInView = false
view.addGestureRecognizer(tapOnScreen)
Как это работает:
<Button title="make it vegan!"
style = {styles.vegan}
onPress = {()=> {
this.setState({isMeat : false})
this.setState({isVegetarian : false})
this.setState({isVegan : true})
}}
>
make it vegan!
</Button>
Хорошо, давайте углубимся в это. Другие ответы верны, показывая, как исправить ваш код, но не объясняют, почему они верны. Вы сказали, что это происходит, когда вы нажимаете кнопку, так что это связано с onPress
.
onPress = {()=> {
this.setState({isMeat : false}, {isVegan: true}, {isVegetarian: false})
}}
Это то, что у вас есть в кнопке, в частности, setState (...), переданный внутри функции thunk / arrow. Функция thunk / arrow хороша - она соответствует типу, требуемому для onPress
, который является функцией, и запускается setState
при нажатии кнопки. Пока все хорошо.
Теперь давайте посмотрим на документы setState
в React, в частности, какие аргументы он принимает . Если вы посмотрите ниже, он принимает два аргумента - средство обновления (классический объект setState) и обратный вызов.
setState(updater[, callback])
Хорошо, давайте посмотрим на то, что у вас есть, еще более внимательно:
this.setState({isMeat : false}, {isVegan: true}, {isVegetarian: false})
Итак, если мы сравним то, что вы написали с тем, что есть в документах, вы прошли [117 ] в качестве средства обновления, {isVegan: true}
в качестве необязательного обратного вызова и {isVegetarian: false}
в качестве третьего, полностью неиспользуемого аргумента.
{isMeat: false}
НЕ является функцией, поэтому вы получаете сообщение, которое видите. Вот почему вы видите нарушение инварианта.