Что такое Two-way binding

Ответ

Two-way binding — это механизм синхронизации данных между моделью (данными) и представлением (UI). Когда данные в модели меняются, представление автоматически обновляется, и наоборот — изменения в UI (например, ввод в поле формы) сразу отражаются в модели.

Чаще всего используется в формах. Например, во фреймворках типа Angular или Vue:

<!-- Vue.js пример -->
<input v-model="message">
<p>{{ message }}</p>
// Angular пример
<input [(ngModel)]="message">
<p>{{ message }}</p>

Под капотом это обычно комбинация:

  1. Связывания свойств (property binding) — модель → представление
  2. Обработки событий (event binding) — представление → модель

В React two-way binding эмулируется через управляемые компоненты:

function MyComponent() {
  const [value, setValue] = useState('');
  return <input value={value} onChange={(e) => setValue(e.target.value)} />;
}

Основной плюс — удобство работы с формами, минус — потенциальные проблемы с производительностью при сложных связях.

Ответ 18+ 🔞

Да ты посмотри, какой удобный механизм, блядь! Two-way binding, ёпта! Это ж когда твои данные в модели и этот, блядь, интерфейс — они как сиамские близнецы, сука! Один чихнул — у другого сопли.

Меняешь что-то в данных — интерфейс тут же подстраивается, как хитрая жопа. А пользователь в поле что-то вписал — данные в модели уже обновились, всё, приехали. Удобно, блядь, особенно для всяких форм, где нужно постоянно что-то вводить и сразу видеть результат.

Вот смотри, в этих ваших модных фреймворках это выглядит просто, как три копейки:

<!-- Vue.js, например -->
<input v-model="message">
<p>{{ message }}</p>

Написал в инпуте «hello» — и снизу тут же, блядь, hello вылезло. Магия, ёперный театр! В Angular почти так же, только синтаксис другой:

<input [(ngModel)]="message">
<p>{{ message }}</p>

А под капотом-то, блядь, что творится? Да обычная комбинация двух вещей, сука:

  1. Данные из модели в интерфейс толкаются.
  2. События из интерфейса (типа onChange) обратно в модель возвращаются. И так по кругу, пока все не заебутся.

В React, правда, своей такой хуйни нет, там всё руками, как в старые добрые. Надо самому state завести и на каждое изменение подписываться:

function MyComponent() {
  const [value, setValue] = useState('');
  return <input value={value} onChange={(e) => setValue(e.target.value)} />;
}

Видишь? value из state в инпут, а onChange ловит, когда пользователь пальцами пошевелил, и обновляет state. Самодельный two-way binding, блядь. Работает, но писать больше.

Плюс этого всего, конечно, огромадный — удобство, сука, не надо каждый раз руками данные вытаскивать и интерфейс перерисовывать. Но и минусы есть, ёпта: если связей таких овердохуища, можно такую кашу заварить, что производительность накроется медным тазом. Так что, блядь, с умом использовать надо, а не как слон в посудной лавке.