У меня очень неприятная проблема с React и checkboxes. Для приложения, с которым я работаю, требуется список флажков, представляющих настройки, которые сохраняются в фоновом режиме. Существует возможность восстановить настройки в исходное состояние.Установка флажка "check" свойство в React
Сначала я создал компонент, у которого есть объект, такой как карта настроек. Каждый параметр имеет ключ и логическое значение. Следовательно:
{
bubbles: true,
gregory: false
}
должен быть представлен в виде:
<input type="checkbox" value="bubbles" checked="checked" />
<input type="checkbox" value="gregory" />
Теперь, кажется, React не знает о том, как предполагается, флажок, чтобы работать. Я не хочу устанавливать значения флажков, я хочу свойство «checked».
Тем не менее, если я пытаюсь что-то вроде этого:
<input
type="checkbox"
value={setting}
checked={this.settings[setting]}
onChange={this.onChangeAction.bind(this)}
/>
Я получаю это предупреждение:
Внимание: AwesomeComponent меняется неконтролируемый вход типа флажок, чтобы управляться. Элементы ввода не должны переключаться с неконтролируемого на управляемый (или наоборот). Решите, используя управляемый или неконтролируемый входной элемент для времени жизни компонента. Подробнее: [некоторая бесполезна страница документы я прочитал несколько раз без толка]
Поэтому я решил создать еще один компонент, чтобы обернуть каждый отдельный флажок, и я получил это:
<input
type="checkbox"
checked={this.state.checked}
onChange={this.onChangeAction.bind(this)}
/>
Теперь checked
является собственностью, находящейся непосредственно в моем штате.
Это дает такое же предупреждение, так что я попытался с помощью defaultChecked
:
<input
type="checkbox"
defaultChecked={this.state.checked}
onChange={this.onChangeAction.bind(this)}
/>
что делает предупреждение исчезает, но теперь она не может сбросить значение checked
по умолчанию. Поэтому я попытался сыграть с методом componentWillReceiveProps
, таким образом, я уверен, что мое состояние правильно, this.state.checked
верен и компонент снова отображает.
И это действительно так. Но флажок остается прежним. На данный момент я оставил это уродливое предупреждение, и я использую checked
. Как я могу исправить это, чтобы предупреждение исчезло?
Я думал, что, возможно, есть способ принудительно повторно отобразить компонент, поэтому он захватывает новое значение defaultChecked
и использует его. Но я не знаю, как это сделать. Возможно, подавить предупреждение только для этого компонента? Это возможно? Возможно, есть что-то еще, что можно сделать?
За час потраченного впустую, потому что я думал, что я понял вопрос из-за весьма специфического предупреждающего сообщение от React. Неа. Это неопределенная переменная, определяемая позже. Спасибо. – Don
Я не могу дождаться этого ответа достаточно. Я условно добавлял и удалял сам атрибут 'checked', что было хорошей практикой в днях HTML-файлов в простой jane. Я потратил двадцать минут на недоумение, почему произошло это сообщение об ошибке. Сообщение об ошибке ReactJS действительно должно иметь специальный случай, подтверждающий несогласованность странности, которая является вкладкой HTML-кода, так что другие не сталкиваются с этим. –
Невероятный ответ :) И это хороший трюк, о котором я не знал (используя двойной удар, чтобы мгновенно привести к логическому значению) –