Локально объявленные переменные не могут быть осмотрены

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

34
задан user35138 7 November 2008 в 08:26
поделиться

2 ответа

По-видимому, ответ :

rt.jar, который поставлется с JDK (где базовые классы Java живут) не компилируется с полной отладочной информацией, включенной в .class файлы, таким образом, отладчик не имеет информации о локальной переменной

, К сожалению, это не что-то, что Eclipse может сделать что-либо о - все отладчики будут иметь ту же проблему с классами ядра JDK.

информация о версии состояний Eclipse 3.4:

Недостающие атрибуты отладки
отладчик требует, чтобы файлы класса были скомпилированы с атрибутами отладки, если он должен быть в состоянии к числам строки дисплея и локальным переменным. Довольно часто библиотеки классов (например, "rt.jar") компилируются без полных атрибутов отладки, и таким образом локальные переменные и аргументы метода для тех классов не видимы в отладчике.

24
ответ дан 27 November 2019 в 17:11
поделиться

Это раньше было , что вы можете получить отладочный 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 в конфигурации запуска.

10
ответ дан 27 November 2019 в 17:11
поделиться
Другие вопросы по тегам:

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