Angular
Cuando las configuraciones angulares de databinding existen dos "observadores" (esto es una simplificación)
//js
$scope.name = 'test';
$timeout(function() { $scope.name = 'another' }, 1000);
$timeout(function() { console.log($scope.name); }, 5000);
<!-- html --->
<input ng-model="name" />
La entrada comenzará con test
y luego se actualizará another
en 1000ms. Cualquier cambio $scope.name
, ya sea desde el código del controlador o cambiando la entrada, se reflejará en el registro de la consola 4000ms más tarde. Los cambios <input />
en la $scope.name
propiedad se reflejan automáticamente en la propiedad, ya ng-model
que la configuración vigila la entrada y notifica $scope
los cambios. Los cambios del código y los cambios del HTML son vinculantes bidireccionales . (Mira este violín )
Reaccionar
React no tiene un mecanismo para permitir que el HTML cambie el componente. El HTML solo puede generar eventos a los que responde el componente. El ejemplo típico es el uso de onChange
.
//js
render() {
return <input value={this.state.value} onChange={this.handleChange} />
}
handleChange(e) {
this.setState({value: e.target.value});
}
El valor de <input />
está controlado completamente por la render
función. La única forma de actualizar este valor es desde el componente en sí, que se realiza adjuntando un onChange
evento al <input />
que establece this.state.value
con el método del componente React setState
. El <input />
no tiene acceso directo al estado de los componentes, por lo que no puede hacer cambios. Esta es una unión unidireccional . (Mira este codepen )