Ответ 1
Angular
Когда 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
устанавливает часы ввода и уведомляет $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 />
не имеет прямого доступа к состоянию компонентов и поэтому не может вносить изменения. Это односторонняя привязка. (Посмотрите codepen)