У вашего приложения может быть более сложное взаимодействие между state и отображаемым пользовательским интерфейсом. Например, элементы управления формой для ввода текста, такие как input и textarea сохраняют свое собственное состояние в DOM по типу пользователя. С React, вы можете переместить это изменяемое состояние в компонент. Ввод пользователя становится частью приложения state, так что React контролирует значение этого поля ввода. Как правило, если у вас есть компоненты React с полями ввода, которые пользователь может ввести, это будет управляемая форма ввода.
Редактор кода имеет скелет компонента, называемого ControlledInput для создания управляемого элемента input. state компонента уже инициализирован со свойством input, который содержит пустую строку. Это значение представляет собой текст, который пользователь вводит в поле input . Сначала в классе компонента создайте метод handleChange() который имеет параметр, называемый event . Когда метод вызывается, он получает объект event который содержит строку текста из input элемента. Вы можете получить доступ к этой строке с помощью event.target.value внутри метода. Обновите состояние компонента со значением этой новой строки. В методе рендеринга создайте элемент input над тегом h4 . Добавьте ему атрибут value и в качестве его значения передайте значение input из состояния компонента. Затем добавьте метод handleChange() компонента в качестве обработчика на событие onChange(). Когда вы вводите текст в поле ввода, этот текст обрабатывается методом handleChange() , устанавливается как свойство input в локальном state и отображается как значение в поле input на странице. Состояние компонента является единственным источником данных для поля ввода. И последнее, но не менее важное: не забудьте добавить необходимые привязки в конструктор.
Примечание: Здесь важно понимать, что event.target.value - это не единое строчное имя конечного свойства, содержащего текстовое значение поля ввода, а путь к конечному свойству с использованием точечной нотации. То есть конечная строка содержится в свойстве value, которое является свойством объекта target, которое, в свою очередь, является свойством объекта event. То есть в обработчике на изменение вы можете получить очень-очень много всякой информации, а не только текстовое значение поля.
И еще момент: хотя у нас обработчик на изменение навешен на HTML-элемент, в наш метод прилетает не чистый объект HTMLElement: change event, а реактовая обертка SyntheticEvent. Это важно учитывать и понимать, если вы хотите более глубоко копнуть эти объекты.
И здесь еще один важный момент: Не забываем, что мы передаем наш обработчик не напрямую в DOM, а через реакт, а тот сильно меняет логику, хоть это и не очевидно. В итоге, у нас не одно событие навешено на сам input, а сразу несколько событий на сам объект window.document. Просто помните об этом на тот случай, если у вас возникнут более хитрые задачи вокруг событий.