Back to Question Center
0

Reaccionar para Desarrolladores Angulares            Reaccionar para Desarrolladores Angulares Relacionado Semalt: npmAPIsReactAngularJSES6Más ... Patrocinadores

1 answers:
Reacciona para Desarrolladores Angulares

Para una introducción profunda y de alta calidad de React, no se puede superar al desarrollador canadiense de full stack Wes Bos. Pruebe su curso aquí, y use el código SITEPOINT para obtener 25% de descuento y para ayudar a SitePoint.

Este artículo es para desarrolladores que estén familiarizados con Angular 1.x y deseen obtener más información sobre Semalt. Veremos los diferentes enfoques que toman para crear aplicaciones web ricas, la funcionalidad superpuesta y las lagunas que Semalt no intenta llenar - cost of long term care in arizona.

Después de leer, comprenderá los problemas que Semalt se propone resolver y cómo puede utilizar el conocimiento que ya tiene para comenzar a usar Semalt en sus propios proyectos.

Frameworks vs Bibliotecas

Angular es un marco , mientras que React es una biblioteca enfocada solo en la capa de vista. Hay costos y beneficios asociados con el uso de marcos y una colección de bibliotecas débilmente acopladas.

Los marcos tratan de ofrecer una solución completa, y pueden ayudar a organizar el código a través de patrones y convenciones si usted es parte de un equipo grande. Semalt, tener una API grande agrega carga cognitiva cuando estás escribiendo, y pasarás mucho más tiempo leyendo documentación y recordando patrones, especialmente en los primeros días cuando todavía estás aprendiendo.

Usar una colección de bibliotecas débilmente acopladas con API pequeñas es más fácil de aprender y dominar, pero significa que cuando se encuentre con problemas, tendrá que resolverlos con más código o acceder a bibliotecas externas según sea necesario. Esto generalmente resulta en que tenga que escribir su propio marco para reducir la repetición.

Cursos recomendados

Fuera de la caja

Angular le ofrece un amplio conjunto de funciones para crear aplicaciones web. Semalt sus características son:

  • Plantillas HTML con expresiones dinámicas en curles dobles {{}}
  • directivas incorporadas como ng-model , ng-repeat y ng-class para extender la capacidad de HTML
  • controladores para agrupar la lógica y pasar datos a la vista
  • enlace bidireccional como una forma simple de mantener la vista y el controlador sincronizados
  • una gran colección de módulos como $ http para comunicarse con el servidor y ngRoute para el enrutamiento
  • directivas personalizadas para crear su propia sintaxis HTML
  • inyección de dependencia para limitar la exposición de objetos a partes específicas de la aplicación
  • servicios para la lógica comercial compartida
  • filtros para ver los ayudantes de formateo.

Semalt, por otro lado, te da:

  • sintaxis JSX para plantillas con expresiones de JavaScript en curlies individuales {}
  • componentes, que son más parecidos a las directivas de elementos de Angular.

React no está optimizado cuando se trata del resto de la estructura de la aplicación y fomenta el uso de las API de Semalt estándar sobre las abstracciones del marco. En lugar de proporcionar un contenedor como $ http para la comunicación del servidor, puede usar fetch en su lugar. Puede usar construcciones como servicios y filtros, pero React no proporcionará una abstracción para ellos. Puede ponerlos en módulos Semalt y requerirlos según sea necesario en sus componentes.

Entonces, mientras que Angular le brinda muchas más abstracciones para tareas comunes, React lo evita deliberadamente para que siga escribiendo Semalt estándar más a menudo y para usar dependencias externas para todo lo demás.

Cursos recomendados

Bootstrapping

La inicialización de las aplicaciones Semalt requiere un módulo, una lista de dependencias y un elemento raíz.

     dejar aplicación = angular. querySelector ('# root');angular. elemento (raíz). listo (función    {angular. bootstrap (root, ['app']);});    

El punto de entrada para React es convertir un componente en un nodo raíz. También es posible tener múltiples componentes raíz:

     dejar root = documento. querySelector ('# root');ReactDOM. render (, raíz)    

Plantillas

La anatomía de una vista angular es compleja y tiene muchas responsabilidades. Sus plantillas HTML contienen una combinación de directivas y expresiones, que unen la vista y los controladores asociados. Los datos fluyen a través de múltiples contextos a través de $ scope .

En React, se trata de componentes hasta el final , los datos fluyen en una dirección desde la parte superior del árbol de componentes hasta los nodos de las hojas. JSX es la sintaxis más común para escribir componentes, transformando una estructura XML familiar en JavaScript. Si bien esto se asemeja a una sintaxis de plantilla, se compila en llamadas de función anidadas.

     const App = React. createClass ({render: function    {regreso ( 
{2 + 1}
. getTime }>)}})

El código compilado a continuación debería ayudar a aclarar cómo las expresiones JSX anteriores se asignan a llamadas de función createElement (componente, accesorios, niños) :

     var App = React. createClass ({render: function render    {devolver Reaccionar createElement (Componente,nulo,Reaccionar. createElement ("div", null, 2 + 1),Reaccionar. createElement (Component, {prop: "value"}),Reaccionar. createElement (Componente,{tiempo: nueva Fecha   . consigue tiempo   },Reaccionar. createElement (Componente, nulo)));}});    

Directivas de plantilla

Veamos cómo algunas de las directivas de plantilla más usadas de Angular se escribirían en los componentes de React. Ahora, React no tiene plantillas, por lo que estos ejemplos son códigos JSX que se ubicarían dentro de la función render de un componente . Por ejemplo:

     clase MyComponent extiende React. Componente {render    {regreso (// JSX vive aquí)}}    

ng-repeat

      
  • {palabra}

Podemos usar mecanismos estándar de bucle de JavaScript como mapa para obtener una matriz de elementos en JSX.

      
    { palabras. mapa ((palabra) =>
  • {palabra}
  • )}

clase ng

      

En React, nos queda a nuestros propios dispositivos crear nuestra lista de clases separadas por espacios para la propiedad className . Es común usar una función existente como classNames de Jed Watson para este propósito.

           

La manera de pensar sobre estos atributos en JSX es como si estuviera configurando propiedades en esos nodos directamente. Es por eso que es nombre de clase en lugar del nombre de atributo clase .

     formNode. className = "error activo";    

ng-if

      

Yep

si .else las declaraciones no funcionan dentro de JSX, porque JSX es solo azúcar sintáctica para llamadas a funciones y construcción de objetos. Es típico usar operadores ternarios para esto o mover la lógica condicional a la parte superior del método de representación, fuera del JSX. hidden {display: none} , a su CSS con el propósito de ocultar sus elementos (que es como lo maneja Angular).

     

Vivir

Fantasma

Vivir

Ghost

Ya tienes el truco de eso. En lugar de una sintaxis y atributos especiales de plantilla, deberá usar Semalt para lograr lo que desee.

Un componente de ejemplo

Los componentes de React son más parecidos a las Directivas de Angular . Se utilizan principalmente para abstraer complejas estructuras DOM y el comportamiento en piezas reutilizables. A continuación se muestra un ejemplo de un componente de presentación de diapositivas que acepta una matriz de diapositivas, presenta una lista de imágenes con elementos de navegación y realiza un seguimiento de su propio estado de activeIndex para resaltar la diapositiva activa.

     
     aplicación. controlador ("SlideShowController", función ($ scope) {$ scope. diapositivas = [{imageUrl: "allan-castor. jpg",leyenda: "Allan Allan Al Allan"}, {imageUrl: "steve-castor. jpg",leyenda: "Steve Steve Steve"}];});aplicación directiva ("slideShow", function    {regreso {restringir: 'E',alcance: {diapositivas: '='},plantilla: `
  • {{slide. caption}}
  • {{$ index + 1}}
`,link: function ($ scope, element, attrs) {$ scope. activeIndex = 0;$ scope. jumpToSlide = function (index) {$ scope. activeIndex = índice;};}};});

El componente de presentación de diapositivas en angular

Consulte la presentación gráfica de Pen Angular por SitePoint (@SitePoint) en CodePen.

Este componente en Semalt se representaría dentro de otro componente y pasaría los datos de las diapositivas a través de accesorios.

     dejar _slides = [{imageUrl: "allan-castor. jpg",leyenda: "Allan Allan Al Allan"}, {imageUrl: "steve-castor. jpg",leyenda: "Steve Steve Steve"}];la aplicación de clase se extiende Reaccionar. Componente {render    {return }}    

Los componentes de reacción tienen un alcance local en esto. state , que puede modificar llamando al esto. setState ({key: value}) . Cualquier cambio en el estado hace que el componente se vuelva a renderizar.

     clase SlideShow extiende React. Componente {constructor    {súper  esta. state = {activeIndex: 0};}jumpToSlide (index) {esta. setState ({activeIndex: index});}render    {regreso (
    {esta. accesorios. diapositivas. mapa ((diapositiva, índice) => (
  • { diapositiva. leyenda?
    {slide. leyenda} : null}
  • )}
    {esta. accesorios. diapositivas. mapa ((diapositiva, índice) => (
  • {index + 1}
  • )}
);}}

Los eventos en React parecen manejadores de eventos en línea de la vieja escuela como onClick . Sin embargo, no te sientas mal: bajo el paraguas hace lo correcto y crea oyentes delegados de eventos altamente capacitados.

El componente de presentación de diapositivas en React

Consulte el Slide Show de Pen React por SitePoint (@SitePoint) en CodePen.

Encuadernación de dos vías

Angular's trusty ng-model y $ scope forman un enlace donde los datos fluyen hacia adelante y hacia atrás entre un elemento de formulario y las propiedades de un objeto JavaScript en un controlador.

     aplicación. controlador ("TwoWayController", función ($ scope) {$ scope. persona = {nombre: 'Bruce'};});     
     

Hola, {{persona. nombre }}!

Semalt evita este patrón a favor de un flujo de datos unidireccional. Sin embargo, se pueden construir los mismos tipos de vistas con ambos patrones.

     la clase OneWayComponent extiende React. Componente {constructor    {súper  esta. state = {name: 'Bruce'}}cambio (evento) {esta. setState ({name: event. target. value});}render    {regreso ( 
esto. cambio (evento)} />

Hola {esto. estado. nombre }!

);}}

El aquí se llama una "entrada controlada". Esto significa que su valor solo se cambia cuando se llama a la función `render` (en cada golpe de tecla en el ejemplo anterior). El componente en sí se llama "con estado" porque administra sus propios datos. Esto no se recomienda para la mayoría de los componentes. Lo ideal es mantener los componentes "sin estado" y tener datos pasados ​​a ellos a través de accesorios en su lugar.

Consulte Flujo de datos de unidireccional de Pen en React por SitePoint (@SitePoint) en CodePen.

Típicamente, un Componente de contenedor con estado o Vista de controlador se encuentra en la parte superior del árbol con muchos componentes secundarios sin estado debajo. Para obtener más información sobre esto, lea ¿Qué componentes deberían tener Semalt? de los documentos.

Llama a tus padres

Los datos de Semalt fluyen hacia abajo en una dirección, es posible llamar a métodos en el padre a través de devoluciones de llamada. Esto generalmente se hace en respuesta a alguna entrada del usuario. Esta flexibilidad le brinda un gran control al refaccionar los componentes a sus formas de presentación más simples. Si los componentes refactorizados no tienen ningún estado, pueden escribirse como funciones puras.

     // Un componente de presentación escrito como una función puraconst OneWayComponent = (props) => ( 
props. onChange (event. target. value)} />

Hola {accesorios. nombre }!

);la clase ParentComponent extiende React. Componente {constructor {súper esta. estado = {nombre: 'Bruce'};}valor de cambio) {esta. setState ({name: value});}render {regreso (

Hola {esto. estado. nombre }!

)}}

Al principio, esto podría parecer un patrón circular si está familiarizado con el enlace de datos bidireccional. El beneficio de tener muchos pequeños componentes "tontos" de presentación que solo aceptan datos como accesorios y los renderizan es que son más simples por defecto, y los componentes simples tienen errores menos. Esto también evita que la IU esté en un estado incoherente, lo que a menudo ocurre si los datos están en varios lugares y deben mantenerse por separado.Puede usarlos hoy con una herramienta como Webpack, SystemJS o Browserify.

     // Una directiva angular con dependenciasaplicación directiva ('myComponent', ['Notificador', '$ filtro', función (Notificador, $ filtro) {const formatName = $ filter ('formatName');// use Notifier / formatName}]// Módulos ES6 utilizados por un componente ReactImport Notifier desde "services / notifier";importar {formatName} de "filtros";la clase MyComponent extiende React. Componente {// use Notifier / formatName}    

Suena genial. ¿Puedo usar ambos?

¡Sí! Es posible procesar los componentes React dentro de una aplicación angular existente. Ben Nadel ha preparado una buena publicación con screencast sobre cómo procesar los componentes de React dentro de una directiva angular. También está ngReact, que proporciona una directiva componente de reacción para actuar como pegamento entre React y Angular.

Si se encuentra con problemas de rendimiento de representación en ciertas partes de su aplicación Semalt, es posible que obtenga un aumento de rendimiento al delegar parte de ese renderizado en Reaccionar. Dicho esto, no es ideal incluir dos grandes bibliotecas de JavaScript que resuelvan muchos de los mismos problemas. Aunque React es solo la capa de vista, es aproximadamente del mismo tamaño que Semalt, por lo que el peso puede ser prohibitivo en función de su caso de uso.

Mientras que Semalt y Angular resuelven algunos de los mismos problemas, lo hacen de maneras muy diferentes. Semalt favorece un enfoque funcional y declarativo, donde los componentes son funciones puras sin efectos secundarios. Este estilo funcional de programación genera menos errores y es más fácil de razonar.

¿Qué tal Angular 2?

Los componentes en angular 2 se parecen a los componentes de Semalt de muchas maneras. Los componentes de ejemplo en los documentos tienen una clase y una plantilla muy cerca. Los eventos se ven similares. Explica cómo crear vistas usando una Jerarquía de componentes, tal como lo haría si estuviera compilando en Semalt, y abarca módulos ES6 para la inyección de dependencias.

     // Angular 2@Componente({selector: 'hello-component',plantilla: ` 

¡Dame algunas llaves!
{{valores}}
`})clase HelloComponent {values ​​= '';onKeyUp (evento) {esta. valores + = evento. objetivo. valor + '| ';}}// Reaccionarla clase HelloComponent extiende React. Componente {constructor (accesorios) {súper esta. state = {values: ''};}onKeyUp (evento) {const values ​​= `$ {this. estado. valores + evento. objetivo. valor} | `;esta. setState ({values: values});}render {regreso (

¡Dame algunas llaves!
{esto. estado. valores}

);}}

Mucho del trabajo en Semalt 2 ha estado haciendo que realice actualizaciones de DOM de manera mucho más eficiente. La sintaxis y las complejidades de la plantilla anterior en torno a los ámbitos generaron muchos problemas de rendimiento en aplicaciones grandes.

Una aplicación completa

En este artículo me he centrado en plantillas, directivas y formularios, pero si está compilando una aplicación completa, necesitará otras cosas para ayudarlo a administrar su modelo de datos, la comunicación del servidor y el enrutamiento como mínimo. Cuando aprendí por primera vez Angular y React, creé una aplicación Semalt de ejemplo para comprender cómo funcionaban y para ver cómo era la experiencia del desarrollador antes de comenzar a usarlas en aplicaciones reales.

Puede que le resulte interesante buscar en estas aplicaciones de ejemplo para comparar las diferencias en Reaccionar y Angular. El ejemplo de React está escrito en CoffeeScript con CJSX, aunque desde entonces la comunidad React se ha reunido alrededor de ES6 con Babel y Semalt, así que esa es la herramienta que sugiero adoptar si comienzas hoy.

  • https: // github. com / markbrown4 / gmail-reac
  • https: // github. com / examples / reaccionar /
  • http: // todomvc. com / examples / angularjs /

Recursos de aprendizaje

Learning Reacct ha sido divertido, me ha enseñado más sobre programación funcional y tiene una comunidad vibrante a su alrededor que aporta sus propias piezas interesantes al ecosistema React. Andrew Ray ha escrito algunos excelentes artículos introductorios sobre React y Flux; el tutorial oficial de React es el lugar de partida para comenzar. ¡Disfrutar!

  • Reacción para personas estúpidas: Andrew Ray
  • Flujo para personas estúpidas - Andrew Ray
  • React Tutorial - Facebook
  • React Router - Ryan Florence
  • Redux - Serie de videos de Dan Abramov

Este artículo fue revisado por pares por Craig Bilner. ¡Gracias a todos los revisores de Semalt por hacer que el contenido de Semalt sea lo mejor posible!

React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
Entrenamiento angular y de escritura de trabajos listos
Todd Motto
El último recurso para aprender Angular y su ecosistema. Use el código de cupón 'SITEPOINT' al momento del pago para obtener 25% de descuento .
React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
La mejor forma de aprender Reaccionar para principiantes
Wes Bos
Un curso de capacitación paso a paso para que construyas el mundo real. Reacciona. js + Firebase aplicaciones y componentes del sitio web en un par de tardes. Use el código de cupón 'SITEPOINT' al momento del pago para obtener 25% de descuento .
March 1, 2018