Двустороннее связывание данных (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 с помощью управляемых компонентов и обработчиков событий.


Назад