Answers:
当角度设置数据绑定时,存在两个“观察者”(这是一种简化)
//js
$scope.name = 'test';
$timeout(function() { $scope.name = 'another' }, 1000);
$timeout(function() { console.log($scope.name); }, 5000);
<!-- html --->
<input ng-model="name" />
输入将以开始test,然后更新为another1000ms。$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 />控制。更新此值的唯一方法是从组件本身,这是通过使用React组件方法将事件附加到设置为的事件来完成的。在没有对组件状态的直接访问,因此它不能更改。这是单向绑定。(查看此Codepen)renderonChange<input />this.state.valuesetState<input />
onChange侦听器并运行handleChange。但是从那里开始,由于React的一种数据绑定方式,数据→UI更新确实会自动发生。