Угловой
Когда angular устанавливает привязку данных, существуют два "наблюдателя" (это упрощение)
//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
из кода контроллера или изменения ввода будут отражены в журнале консоли спустя 4000 мсек. Изменения <input />
в $scope.name
свойстве отражаются в свойстве автоматически, поскольку ng-model
setup отслеживает ввод и уведомляет $scope
об изменениях. Изменения из кода и изменения из 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 />
управляется полностью с помощью render
функции. Единственный способ обновить это значение - из самого компонента, что выполняется путем присоединения onChange
события к объекту, <input />
который устанавливается this.state.value
с помощью метода компонента React setState
. <input />
Не имеет прямой доступ к состоянию компонентов, и поэтому он не может вносить изменения. Это односторонняя привязка . (Посмотрите этот код )