В нашем приложении Redux Form 5.3 (не 6.x) я хочу отобразить <input type="checkbox" />
следующим образом:
// In some cases, fieldHelper.checked is initially undefined. Then, when the
// user clicks one of the checkboxes, fieldHelper.checked is
// explicitly set to true or false. This change from one of the component's
// props being undefined to having a value causes a React warning; see
// http://stackoverflow.com/a/38015169/473792 and
// https://facebook.github.io/react/docs/forms.html#controlled-components
// So to prevent that warning, we do a quick null check on
// fieldHelper.checked and replace it with false explicitly if it is
// undefined before rendering the checkbox.
const fieldHelper = this.props.field['checkbox'];
const checked = fieldHelper.checked || false;
const modifiedFieldHelper = Object.assign({}, fieldHelper);
delete modifiedFieldHelper.checked;
return (
<input
checked={checked}
{...modifiedFieldHelper}
/>
);
}
Как отмечено в комментарии, в моей тестовой среде this.props.field['checkbox'].checked
становится undefined
сразу после монтирования файла <input>
. В результате, когда мои тесты изменяют значение this.props.field['checkbox'].checked
, я получаю следующее предупреждение:
Предупреждение: ApplicantForm изменяет флажок неконтролируемого ввода типа на управляемый. Входные элементы не должны переключаться с неуправляемого на управляемое (или наоборот). Выберите между использованием контролируемого или неконтролируемого элемента ввода на протяжении всего срока службы компонента.
... Если я явно не установил checked
prop в <input>
в false
вместо undefined
, как показано во фрагменте кода, который я разместил выше.
Вместо использования этой нулевой проверки я хотел бы установить начальное значение this.props.fields['checkbox'].checked
до запуска моих тестов. Я знаю, что могу установить начальное значение полей в Redux Form. Есть ли способ установить начальное значение вспомогательного свойства, такого как свойство checked
, которым также управляет Redux Form?