У меня есть поле ввода в React.
<input
type = "number"
value = {this.props.answer || undefined}
onKeyUp = {(e) => (e.keyCode === 13) ? onAnswer(e.target.value) : false }
/>
Таким образом, он ведет себя так же, как мне нужно, чтобы он вел себя:
- Если нет
this.props.answer
, есть На входе нет начального значения. - Пользователь может ввести любое число. Ничего не происходит на
onChange
- Когда пользователь нажимает Enter, состояние изменяется (в функции
onAnswer
). После этого значение поля ввода остается this.props.answer
, и пользователь НЕ может больше изменять это значение.
Но когда пользователь нажимает Enter, я получаю это предупреждение:
Компонент изменяет неконтролируемый ввод типа номера для управления.
Я читал о неконтролируемых компонентах и пробовал это:
<input
type = "number"
defaultValue = {this.props.answer || undefined}
ref={this.input}
onKeyUp = {(e) => (e.keyCode === 13) ? onAnswer(e.target.value) : false }
/>
Таким образом, я не могу предупреждение не появляется, но поле ввода остается редактируемым после того, как пользователь нажмет Enter. Я также пытался использовать свойства value
и defaultValue
, но затем снова получаю то же предупреждение.
Я хочу, чтобы поле ввода было своего рода контролируемым, но я не хочу менять состояние на onChange
, но только когда пользователь нажимает Enter (onKeyUp
). После этого пользователь не сможет редактировать ввод. Есть ли способ реализовать это поведение?
ОБНОВЛЕНИЕ: я не знал, что могу установить свойство readOnly
для ввода на основе состояния. Установка его в false после установки состояния решает мою проблему.