Angular
Khi angle thiết lập databinding tồn tại hai "watchers" (đây là một sự đơn giản hóa)
//js
$scope.name = 'test';
$timeout(function() { $scope.name = 'another' }, 1000);
$timeout(function() { console.log($scope.name); }, 5000);
<!-- html --->
<input ng-model="name" />
Đầu vào sẽ bắt đầu bằng test
, sau đó cập nhật lên sau another
1000ms. Bất kỳ thay đổi nào đối với $scope.name
, từ mã bộ điều khiển hoặc bằng cách thay đổi đầu vào, sẽ được phản ánh trong nhật ký bảng điều khiển 4000ms sau đó. Các thay đổi đối với thuộc <input />
tính được phản ánh $scope.name
tự động vì ng-model
thiết lập sẽ xem dữ liệu đầu vào và thông báo $scope
về các thay đổi. Các thay đổi từ mã và các thay đổi từ HTML là liên kết hai chiều . (Kiểm tra trò chơi này )
Phản ứng
React không có cơ chế cho phép HTML thay đổi thành phần. HTML chỉ có thể nêu ra các sự kiện mà thành phần phản hồi. Ví dụ điển hình là bằng cách sử dụng onChange
.
//js
render() {
return <input value={this.state.value} onChange={this.handleChange} />
}
handleChange(e) {
this.setState({value: e.target.value});
}
Giá trị của <input />
được kiểm soát hoàn toàn bởi render
chức năng. Cách duy nhất để cập nhật giá trị này là từ chính thành phần, được thực hiện bằng cách đính kèm một onChange
sự kiện vào sự kiện <input />
được đặt this.state.value
với phương thức thành phần React setState
. Các <input />
không có quyền truy cập trực tiếp đến tình trạng các thành phần, và vì vậy nó không thể thực hiện thay đổi. Đây là ràng buộc một chiều . (Kiểm tra codepen này )