Может ли кто-нибудь объяснить разницу между реакцией односторонней привязки данных и двусторонней привязкой данных Angular



Я немного нечеткий на этих понятиях, если я создаю одно и то же приложение ToDo полностью в AngularJS и ReactJS--- что заставляет React ToDo использовать одностороннюю привязку данных против двухсторонней привязки данных AngularJS?



Я понимаю, что реагировать вроде как работает



Render (data) - - - > UI.



чем это отличается от углового?

609   3  

3 ответов:

Угловое

при угловой настройке привязки данных существуют два "наблюдателя" (это упрощение)

//js
$scope.name = 'test';
$timeout(function()  { $scope.name = 'another' }, 1000);
$timeout(function()  { console.log($scope.name); }, 5000);

<!-- html --->
<input ng-model="name" />

вход будет начинаться с test, затем обновить до another в 1000 мс. Любые изменения $scope.name, либо из кода контроллера, либо путем изменения ввода, будет отражено в журнале консоли 4000ms позже. Изменения в <input /> отражены в $scope.name свойство автоматически, так как ng-model устанавливает часы ввода и уведомляет $scope of изменение. Изменения в коде и изменения HTML-кода двусторонняя привязка. (Проверьте эта скрипка)

реагировать

React не имеет механизма, позволяющего HTML изменять компонент. HTML может вызывать только те события, на которые реагирует компонент. Типичным примером является использование onChange.

//js
render() { 
    return <input value={this.state.value} onChange={this.handleChange} />
}
handleChange(e) {
    this.setState({value: e.target.value});
}

значение <input /> контролирует полностью на . Единственный способ обновить это значение-из самого компонента, что делается путем присоединения onChange событие <input />, который устанавливает this.state.value С методом главных компонент реагировать setState. Элемент <input /> не имеет прямого доступа к состоянию компонентов, и поэтому он не может вносить изменения. Это односторонняя привязка. (Проверьте это codepen)

Я сделал небольшой рисунок. Я надеюсь, что это достаточно ясно. Дайте мне знать, если это не так !

2 ways data binding VS 1 way data binding

двусторонняя привязка данных обеспечивает возможность принимать значение свойства и отображать его в представлении, а также иметь вход для автоматического обновления значения в модели. Например, вы можете показать свойство "task" в представлении и привязать значение текстового поля к этому же свойству. Таким образом, если пользователь обновляет значение текстового поля, представление будет автоматически обновляться, и значение этого параметра также будет обновляться в контроллере. Напротив, один способ привязки только связывает значение Модели для представления и не имеет дополнительного наблюдателя, чтобы определить, было ли значение в представлении изменено пользователем.

По Поводу Реакции.js, он не был действительно разработан для двухсторонней привязки данных, однако вы все равно можете реализовать двухстороннюю привязку вручную, добавив некоторую дополнительную логику, см. например this ссылке. В Угловом.JS двухсторонняя привязка является гражданином первого класса, поэтому нет необходимости добавлять эту дополнительную логику.

Comments

    Ничего не найдено.