Двустороннее связывание данных (Two-way Data Binding
) - это паттерн, который позволяет связывать изменения значения элемента пользовательского интерфейса (например, текстового поля) с соответствующим значением в состоянии компонента, и наоборот.
В HTML элементы формы, такие как <input>
, <textarea>
и <select>
, обычно сами управляют своим состоянием и обновляют его когда пользователь вводит данные. В React мутабельное состояние обычно содержится в свойстве компонентов state
и обновляется только через вызов setState()
Мы можем скомбинировать оба подхода и сделать состояние React-компонента «единственным источником правды, SSOT
». Тогда React-компонент будет рендерить форму и контролировать её поведение в ответ на пользовательский ввод. Значение элемента формы input в этом случае будет контролировать React, а сам элемент будет называться «управляемый компонент».
В React для реализации двустороннего связывания данных используется обработчик событий onChange
и управляемые компоненты (Controlled Components).
Управляемые компоненты - это компоненты, у которых значение определяется не пользователем, а компонентом самим. Для управляемых компонентов значение определяется в состоянии компонента, а не в DOM-элементе, и обновляется только через изменение состояния.
Вот пример реализации двустороннего связывания данных для текстового поля в React:
class MyComponent extends React.Component {
constructor(props) {
super(props)
this.state = { value: "" }
this.handleChange = this.handleChange.bind(this)
}
handleChange(event) {
this.setState({ value: event.target.value })
}
render() {
return (
<div>
<input type="text" value={this.state.value} onChange={this.handleChange} />
<p>Value: {this.state.value}</p>
</div>
)
}
}
Здесь мы создаем компонент MyComponent
, который содержит текстовое поле и отображает его значение в параграфе ниже. Значение текстового поля определяется в состоянии компонента (this.state.value
), и при каждом изменении его значения через обработчик события onChange
, состояние компонента обновляется через this.setState({ value: event.target.value })
.
Таким образом, изменения в текстовом поле отражаются на значении в состоянии компонента, и наоборот. Это позволяет нам реализовать двустороннее связывание данных в React с помощью управляемых компонентов и обработчиков событий.