Хорошо, давайте углубимся в это. Другие ответы верны, показывая, как исправить ваш код, но не объясняют, почему они верны. Вы сказали, что это происходит, когда вы нажимаете кнопку, так что это связано с 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}
НЕ является функцией, поэтому вы получаете сообщение, которое видите. Вот почему вы видите нарушение инварианта.
По-видимому, ответ :
rt.jar, который поставлется с JDK (где базовые классы Java живут) не компилируется с полной отладочной информацией, включенной в .class файлы, таким образом, отладчик не имеет информации о локальной переменной
, К сожалению, это не что-то, что Eclipse может сделать что-либо о - все отладчики будут иметь ту же проблему с классами ядра JDK.
информация о версии состояний Eclipse 3.4:
Недостающие атрибуты отладки
отладчик требует, чтобы файлы класса были скомпилированы с атрибутами отладки, если он должен быть в состоянии к числам строки дисплея и локальным переменным. Довольно часто библиотеки классов (например, "rt.jar") компилируются без полных атрибутов отладки, и таким образом локальные переменные и аргументы метода для тех классов не видимы в отладчике.
Это раньше было , что вы можете получить отладочный rt.jar с http: //download.java.net/jdk6/binaries/, но не больше.
Итак, создание собственного rt.jar с помощью -g сейчас кажется единственным вариантом. Это очень просто: просто используйте javac и jar из JDK.
mkdir \ tmp; mkdir \ tmp \ out
src.zip
из каталога установки JDK в tmp \ src
cd src
find -name * .java> files.txt
javac -verbose -g -d \ tmp \ out -J-Xmx512m -cp " \ jre \ lib \ rt.jar"; " \ lib \ tools.jar" @ files.txt
cd \ tmp \ out; jar cvf rt.jar *
Если вы используете Eclipse, вам не нужен -Xbootclasspath / p :, вместо этого просто поместите отладочную банку в Bootstrap Entries перед JRE в конфигурации запуска.