¿Alguien puede explicar la diferencia entre el enlace de datos unidireccional de Reacts y el enlace de datos bidireccional de Angular?
109
Estoy un poco confuso con estos conceptos, si construyo la misma aplicación ToDo completamente en AngularJS y ReactJS --- ¿qué hace que React ToDo use enlace de datos unidireccional frente al enlace de datos bidireccional de AngularJS?
La entrada comenzará con testy luego se actualizará anotheren 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.namepropiedad se reflejan automáticamente en la propiedad, ya ng-modelque la configuración vigila la entrada y notifica $scopelos 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.
El valor de <input />está controlado completamente por la renderfunción. La única forma de actualizar este valor es desde el componente en sí, que se realiza adjuntando un onChangeevento al <input />que establece this.state.valuecon 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 )
Gracias, esto fue extremadamente informativo. Así que supongo que Angular funciona más como UI <----> Data en contraste con Render (data) ---> UI de React.
WinchenzoMagnifico
Sí, esa es una forma muy concisa de decirlo
Kyeotic
5
Para ser claros, lo que distingue al enlace de datos es que realiza las actualizaciones automáticamente . En el ejemplo de reaccionar, la interfaz de usuario → datos todavía están sucediendo, es sólo que no sucede por defecto - que tiene que configurar manualmente el onChangeoyente y de ejecución handleChange. Pero a partir de ahí, debido a los datos de una manera vinculante Reaccionar, los datos → actualización de la interfaz hace suceden de forma automática.
Adam Zerner
Para su información, el violín necesitaba una referencia a AngularJS 1.1.1, supongo que la referencia a AngularJS 1.0.1 ya no era válida, estaba obteniendo un 404. Curiosamente, el uso de código idéntico en un violín nuevo (con una referencia 1.1.1) falla , no sé de qué se trata.
Josh Sutterfield
194
Hice un pequeño dibujo. Espero que esté lo suficientemente claro. ¡Avísame si no es así!
@DamienRoche, hasta donde entiendo este concepto, la diferencia es la siguiente: en el enlace de datos bidireccional: cambiar los datos cambia la vista y viceversa: actualizar la entrada dentro de la vista actualiza los datos. Flujo de datos en curso: actualizar la vista de actualizaciones de datos pero actualizar la entrada en la vista no actualizará los datos a menos que el programador lo haga explícitamente adjuntando el oyente a la entrada que actualizará los datos. Espero que le quede un poco más claro.
Cake_Seller
2
Gracias, @Patrick por tu mensaje. Siempre estoy muy feliz de sentir que algo que hice es útil para los demás
Gabriel
el enlace está roto @Gabriel ¿podrías compartir la imagen en la publicación?
user3141326
12
El enlace de datos bidireccional brinda la capacidad de tomar el valor de una propiedad y mostrarlo en la vista al tiempo que tiene una entrada para actualizar automáticamente el valor en el modelo. Por ejemplo, podría mostrar la propiedad "tarea" en la vista y vincular el valor del cuadro de texto a esa misma propiedad. Entonces, si el usuario actualiza el valor del cuadro de texto, la vista se actualizará automáticamente y el valor de este parámetro también se actualizará en el controlador. Por el contrario, la vinculación unidireccional solo vincula el valor del modelo a la vista y no tiene un observador adicional para determinar si el usuario ha cambiado el valor en la vista.
Con respecto a React.js, en realidad no fue diseñado para el enlace de datos bidireccional, sin embargo, aún puede implementar el enlace bidireccional manualmente agregando algo de lógica adicional, consulte, por ejemplo, este enlace . En Angular.JS, el enlace bidireccional es un ciudadano de primera clase, por lo que no es necesario agregar esta lógica adicional.
onChange
oyente y de ejecuciónhandleChange
. Pero a partir de ahí, debido a los datos de una manera vinculante Reaccionar, los datos → actualización de la interfaz hace suceden de forma automática.Hice un pequeño dibujo. Espero que esté lo suficientemente claro. ¡Avísame si no es así!
fuente
El enlace de datos bidireccional brinda la capacidad de tomar el valor de una propiedad y mostrarlo en la vista al tiempo que tiene una entrada para actualizar automáticamente el valor en el modelo. Por ejemplo, podría mostrar la propiedad "tarea" en la vista y vincular el valor del cuadro de texto a esa misma propiedad. Entonces, si el usuario actualiza el valor del cuadro de texto, la vista se actualizará automáticamente y el valor de este parámetro también se actualizará en el controlador. Por el contrario, la vinculación unidireccional solo vincula el valor del modelo a la vista y no tiene un observador adicional para determinar si el usuario ha cambiado el valor en la vista.
Con respecto a React.js, en realidad no fue diseñado para el enlace de datos bidireccional, sin embargo, aún puede implementar el enlace bidireccional manualmente agregando algo de lógica adicional, consulte, por ejemplo, este enlace . En Angular.JS, el enlace bidireccional es un ciudadano de primera clase, por lo que no es necesario agregar esta lógica adicional.
fuente