3.4 KiB
title, localeTitle
| title | localeTitle |
|---|---|
| Create a Controlled Input | Создание управляемого входа |
Создание управляемого входа
Здесь идея состоит в том, чтобы создать управляемый вход, где текст обновляется из вашего состояния, а не из браузера.
Итак, для начала у нас есть скелет, в котором у нас есть класс с именем ControlledInput и переменная состояния с именем input . Теперь все, что вам нужно сделать, это принять это состояние, и когда наблюдается изменение в окне ввода, запускается функция, которая изменяет значение внутри этого поля ввода и в абзаце ниже.
Таким образом, вы первый шаг будете делать функцию, которая изменяет input переменной состояния.
handleChange(event) {
this.setState({
input: event.target.value
});
}
Теперь ваш следующий шаг будет включать создание окна ввода и запуск его, когда кто-то что-то набирает. К счастью, у нас есть событие, называемое onChange() для этой цели. PS - Вот еще один способ связать this с функцией
<input onChange = {this.handleChange.bind(this)}/>
Но это не будет служить вашей цели. Хотя вы можете почувствовать, что это работает. Так что происходит здесь, это текстовые обновления из браузера, а не из состояния. Поэтому, чтобы исправить это, мы добавим атрибут value и установим его в this.state.input для элемента ввода, который заставит вход получить управляемый по состоянию.
<input value = {this.state.input} onChange = {this.handleChange.bind(this)}/>
Это может быть немного сложно переварить, но чтобы сделать вещи более ясными, попробуйте удалить всю вещь onChange , чтобы ваш код выглядел так
<input value = {this.state.input}/>
Теперь запустите тесты еще раз, можете ли вы ввести что-нибудь? Ответ на него будет «НЕТ», так как ваше поле ввода получает значение из input переменной состояния, так как нет изменений в input состояния (сначала пустая строка), что произойдет только при handleChange() функции handleChange() которая будет происходит только тогда, когда у вас есть обработчик событий, например onChange() поэтому строка внутри поля ввода останется такой, onChange() есть, т.е. пустая строка.