React Native: Invariant Violation: неверный аргумент передан как обратный вызов. Ожидаемая функция. Вместо этого получил: [объект объекта]

Установите cancelsTouchesInView вашего распознавателя на значение false. В противном случае он «потребляет» прикосновение для себя и не передает его в виде таблицы. Вот почему событие выбора никогда не происходит.

, например, в swift

let tapOnScreen: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "CheckTheTime")
tapOnScreen.cancelsTouchesInView = false
view.addGestureRecognizer(tapOnScreen)
0
задан karel 4 March 2019 в 07:55
поделиться

2 ответа

Как это работает:

<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>
0
ответ дан Michael Stotzer 4 March 2019 в 07:55
поделиться

Хорошо, давайте углубимся в это. Другие ответы верны, показывая, как исправить ваш код, но не объясняют, почему они верны. Вы сказали, что это происходит, когда вы нажимаете кнопку, так что это связано с 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} НЕ является функцией, поэтому вы получаете сообщение, которое видите. Вот почему вы видите нарушение инварианта.

0
ответ дан James Wang 4 March 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: