Угловой
Когда 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-modelsetup отслеживает ввод и уведомляет $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 />Не имеет прямой доступ к состоянию компонентов, и поэтому он не может вносить изменения. Это односторонняя привязка . (Посмотрите этот код )