Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DIRECCIÓN DE POSGRADO
Cochabamba – Bolivia
2018
CONTENIDO
ÍNDICE DE FIGURAS ........................................................................................................ 4
INDICE DE TABLAS .......................................................................................................... 5
RESUMEN ......................................................................................................................... 6
DEDICATORIA .................................................................................................................. 7
AGRADECIMIENTOS ........................................................................................................ 8
CAPÍTULO I ....................................................................................................................... 9
1. Introducción ........................................................................................................................... 9
2. Delimitación del Problema ................................................................................................ 10
3. Generalidades ..................................................................................................................... 10
3.1. Antecedentes Generales ............................................................................................... 10
3.2. Antecedentes Específicos ............................................................................................. 11
4. Metodología ......................................................................................................................... 11
5. Angular ................................................................................................................................. 12
5.1 Características de Angular ............................................................................................ 12
5.1.1. Velocidad y Rendimiento ........................................................................................... 13
5.1.2. Productividad ............................................................................................................... 14
5.1.3. Desarrollo..................................................................................................................... 14
5.2 Arquitectura de Angular ................................................................................................. 15
5.2.1. Módulos ........................................................................................................................ 16
5.2.1.1. NgModules Metadatos ........................................................................................... 16
5.2.1.2. Root NgModule ....................................................................................................... 17
5.2.1.3. NgModule y Componentes.................................................................................... 17
5.2.1.4. NgModules y modules de JavaScript .................................................................. 18
5.2.2. Componentes .............................................................................................................. 19
5.2.2.1. Metadatos y Componentes ................................................................................... 20
5.2.3. Plantillas, Directiva y Enlaces de Datos .................................................................. 21
5.2.3.1. Plantillas y Vistas .................................................................................................... 21
5.2.3.2. Directivas ................................................................................................................. 21
5.2.4. Componentes de Estilo.............................................................................................. 23
5.2.5. Servicios e Inyección de Dependencias ................................................................. 26
5.2.5.1. Servicios ................................................................................................................... 27
5.2.5.2. Inyección de Dependencia .................................................................................... 28
5.2.6. Ciclo de vida ................................................................................................................ 28
5.2.7. Formularios .................................................................................................................. 30
A) Formularios reactivos:.................................................................................................... 30
2
B) Formularios basados en planillas: ............................................................................... 30
C) Formas Dinámicas.......................................................................................................... 30
5.2.8. Observables ................................................................................................................ 31
5.2.9. Enrutamiento ............................................................................................................... 32
5.2.10. La librería RxJS (Reactive Extension for JavaScript) ....................................... 33
6. ReactJS................................................................................................................................ 34
6.1. Características de ReactJS .......................................................................................... 35
6.2. Arquitectura de React .................................................................................................... 36
6.2.1. Concepto DOM ........................................................................................................... 36
6.2.2. React Propiedades y Estado .................................................................................... 37
6.2.3. React State .................................................................................................................. 38
6.2.3.1. Componente Simple (Stateless Component) ..................................................... 38
6.2.3.2. Componente de Estado (Stateful Component) .................................................. 39
6.2.3.3. Componente que usa Complementos Externos ................................................ 44
6.2.3.4. React y Clases ........................................................................................................ 46
6.2.3.5. JSX ........................................................................................................................... 46
7. Similitudes entre Angular y ReactJS ............................................................................... 49
8. Ventajas y Desventajas de Angular y ReactJS ............................................................. 49
8.1. Ventajas y desventajas de Angular ............................................................................. 49
8.2. Ventajas y desventajas de ReactJS ............................................................................ 51
9. Caso de estudio .................................................................................................................. 52
10. Conclusiones ................................................................................................................... 59
11. Bibliografía ....................................................................................................................... 61
3
ÍNDICE DE FIGURAS
INDICE DE TABLAS
5
RESUMEN
Angular y React son las dos herramientas más importantes del desarrollo web actualmente,
muchas personas están intentando aprenderlas. La siguiente monografía nos brinda
información sobre estas herramientas que nos facilitan el desarrollo de interfaces de usuario, las
características principales que nos ofrecen el Framework Angular y la Librería React, para el
desarrollo eficiente en Front-end dando al cliente una mejor interfaz en aplicaciones web para la
mejor interacción con los usuarios. Brinda también un caso de estudio sobre “Sistemas de
Seguridad Industrial” del módulo II del grupo B turno tarde, realizado en el Diplomado de
“Experto en el Desarrollo de Aplicaciones Empresariales” como un ejemplo.
Una de las características que tiene angular es que se puede ejecutar en múltiples plataformas
(es multiplataforma), se verá componentes, servicios, módulos, inyección de dependencias,
observables, RxJS, Formularios, enrutamiento, parte de todo lo que utiliza Angular, utiliza el
leguaje de TypeScript (superconjunto de JavaScript).
Al igual que Angular la Librería React utiliza también el lenguaje de TypeScript, se verá
concepto de DOM, propiedades y estado. React y clases.
Se dará a conocer una pequeña descripción de similitudes y diferencias entre Angular y React.
Se mostrará un ejemplo de interfaz de usuario elaborado con angular cli con el editor de código
WebStorm.
6
DEDICATORIA
7
AGRADECIMIENTOS
8
CAPÍTULO I
1. Introducción
Actualmente existe bastante demanda en la utilización de páginas web, así sea por un
computador o bien por celular, tablet o smartphone, por esta razón es importante la interfaz de
usuario de aplicaciones web, tomando en cuenta las nuevas herramientas tecnológicas como
frameworks y librerías, que son herramientas fundamentales para su desarrollo al momento de
introducir imágenes o gráficos, información, enlaces, datos, animaciones, validaciones e
interacciones, para cumplir los requerimientos del cliente, todos los pasos tienen que ser
entendibles, para un cliente la interfaz de usuario es muy importante al momento de obtener un
producto de software, porque será la cara de presentación para la página web donde será
utilizado por muchos usuarios, entonces este tiene que ser lo más entendible, confiable y
seguro posible.
Se busca que la interfaz de usuario para aplicaciones web sea lo más entendible, amigable,
confiable posible, donde el cliente o usuario final este seguro y conforme con su producto. Por
este motivo al ver la necesidad de mejorar la interfaz de usuario en las aplicaciones web, se
toman en cuenta diferentes herramientas para su desarrollo, es decir, lo que tendrá y manejara
la interfaz como que gráficos o imágenes tendrá, que base de datos manejara, que tipo de
información se mostrará, que enlaces tendrá, en otras palabras todas las opciones que deberá
manejar y mostrase en la interfaz pero que tenga un inicio rápido sin que este sea lento ni
pesado de cargar.
Cada desarrollador de Front-End es independiente y libre de elegir que herramienta utilizar para
realizar este servicio, cliente-servidor, pero en estos últimos años hay una serie de opciones, las
más cotizadas son: Angular y React, por ser open source principalmente o llamado también
código abierto, cada una tiene características particulares, por lo cual, cada sistema
desarrollado siempre está en constante mejora de la interfaz de usuario de aplicaciones web, el
framework Angular y la librería React en este sentido nos ofrecen varias opciones las cuales
nos facilitan en la creación de la interfaz.
9
Para esto, se tomará en cuenta la información necesaria de las características de las
herramientas de software, como ser Framework Angular y librería React, las metodologías
conocidas, que conllevan a tener una estructura consistente, amigable y confiable para el
usuario.
Las versiones de angular son varias actualmente, tomaremos solo como referencia conceptos
de Angular en general, conceptos de Angular 2 porque es considerada la más estable y Angular
CLI para el caso de estudio.
La información que se presentará, pretende mostrar las características más relevantes de estas
herramientas, su importancia para el desarrollo de IU en aplicaciones web y con esto se pueda
tomar en cuenta como punto de inicio de conocimiento para ayudar al desarrollador, dándole
dos opciones más (Angular o React) para la elaboración de sus IU, también crear interés o
curiosidad en personas que tengan conocimientos sobre el tema, para realizar sus propias IU
de acuerdo a sus requerimientos.
3. Generalidades
10
aplicación web, en este sentido se toma en cuenta la validación, imágenes o gráficos,
interacciones que hará la aplicación. Se toma en cuenta en que plataforma se trabajara, su
velocidad, rendimiento y la productividad.
Para las interfaces de usuario de aplicaciones web realizadas con lenguaje TypeScript o
JavaScript existe el framework Angular y la librería React que proporcionan opciones para
facilitar su desarrollo, tanto Angular como React tienen propios mecanismos de desarrollo,
como propias características y arquitecturas.
Para la elaboración de una IU, es necesario el estudio de los conceptos de las herramientas
tecnológicas de Angular y React sobre estas aplicaciones.
La librería React permite integrarlo a otros proyectos realizados con JavaScript puro, que se
asemeja a la sintaxis de HTML.
4. Metodología
11
5. Angular
Angular comúnmente llamado “Angular 2+” o “Angular” es un framework para aplicaciones web
desarrollado en TypeScript, de código abierto, se utiliza para crear y mantener aplicaciones web
de una sola página. Su objetivo es aumentar las aplicaciones basadas en navegador con
capacidad de Modelo – Vista – Controlador (MVC), en un esfuerzo para hacer que el desarrollo
y las pruebas sean más fáciles, Angular es un conjunto de bibliotecas de TypeScript. Gracias a
que el framework Angular utiliza Módulos, Componentes, Servicios, Plantillas, Enrutamiento,
esto ofrece una mayor eficiencia y rapidez del proyecto. Los bloques de construcción de una
aplicación angular son NgModules, proporcionan un contexto de compilación para los
componentes, NgModules recopila el código relacionado en conjunto funcionales, una
aplicación angular está definida por un conjunto de NgModules.
Fue originalmente desarrollado por Mirko Hevery en el año 2009, a la fecha, es mantenido por
equipo de desarrollo de Google donde también es parte, Adams Abrons le dio el nombre de
angular inspirado en los paréntesis angulares <> de HTML.
La biblioteca lee el HTML que contiene atributos de las etiquetas personalizadas adicionales,
entonces obedece a las directivas de los atributos personalizados y une las piezas de entrada o
salida de la página a un modelo representado por las variables estándar de JavaScript. Angular
es la evolución de AngularJS aunque incompatible con su predecesor AngularJS.
12
Modelo: Son los datos, que junto con la plantilla producen las vistas.
Vista: Lo que el usuario visualiza. Parte de una plantilla, se funde con el modelo y se renderiza
en el árbol DOM. (Brad Geen, Abril, 2013)
Generación de Código: Angular convierte las plantillas en código altamente optimizado para
máquinas virtuales de JavaScript de hoy en día. (Angular, 2018)
Universal: Ejecuta la primera vista de la aplicación en node.js, .net, php y otros servidores, para
renderizar de forma casi instantánea obteniendo solo HTML y css, también para optimizar el
S.E.O. (Search Engine Optimization, Optimización de Motores de Búsqueda) del sitio.
13
División del código : Las aplicaciones de angular se cargan rápidamente gracias al nuevo
enrutador de componentes. Este ofrece una división automática de códigos para que los
usuarios solo carguen el código necesario para procesar la vista que necesitan. (angular,
2018).
5.1.2. Productividad
Actualmente el código del programa constituye por completo el sitio web, haciendo las nuevas
aplicaciones más interactivas, rápidas, avanzadas complejas y mucho más completas.
Plantillas: Permite crear rápidamente vistas de interfaz de usuario con una sintaxis de plantilla
simple y potente. (Angular, 2018)
5.1.3. Desarrollo
Los proyectos generan mejores avances en las aplicaciones. Angular es una increíble
alternativa para el desarrollo de aplicaciones web de mediana y gran escala, es utilizado en
youtube, páginas de bancos, noticias, entretenimiento y otros sitios más.
Animación: Permite crear animaciones complejas y de alto rendimiento con muy poco código a
través de la intuitiva API de Angular.
Accesibilidad: Posee características para crear aplicaciones accesibles con los componentes
disponibles para A.R.I.A. (Accesible Rich Internet Applications, define como realizar contenido
web y aplicaciones web, especialmente desarrolladas con Ajax y JavaScript).
14
5.2 Arquitectura de Angular
Los componentes definen Vistas, que son conjunto de elementos de pantalla que Angular
puede elegir y modificar según la lógica y los datos de su programa.
Componentes y servicios son clases que proporcionan metadatos y angular los puedan usar.
Los metadatos de una clase de componente asocian con una plantilla que define la vista,
combina HTML común con directivas angulares, para que angular lo modifique antes de su
vista.
Los metadatos de servicios proporcionan la información que angular para ponerla a disposición
de los componentes a través de la inyección de dependencia.
Angular proporciona el servicio router para ayudar a definir rutas de navegación entre vistas. El
enrutador proporciona formas de navegación en el navegador.
(Angular, 2018)
Los módulos en Angular son una pieza fundamental en el desarrollo, sirven para organizar el
código en librerías, los módulos son contenedores de diferentes partes de nuestra aplicación
(controladores, servicios, filtros, directivas, etc). En cuanto a código es una clase con un
decorador llamado @NgModule. el propósito es: organizar las partes de nuestra aplicación.
Cada aplicación angular tiene un código raíz, denominado AppModules que inicia la aplicación,
aparte de tener varios módulos funcionales, también puede importar funcionalidades de otros
NgModules y permitir que otros NgModules exporten y utilicen su propia funcionalidad, por
ejemplo: para usar servicio enrutador en la aplicación se importa el Router NgModules.
(Angular, 2018)
Exports: subconjunto de declaraciones que deberían ser visibles y utilizables en las plantillas
de componentes de otros NgModules.
Imports: módulos cuyas clases exportadas son necesarias para las plantillas de componentes
declaradas para el NgModule.
Bootstrap: vista principal de la aplicación, llamada componente raíz que agarra todas las vistas
de la aplicación. (Angular, 2018)
16
5.2.1.2. Root NgModule
Ejemplo:
@NgModule({
imports: [ BrowserModule ],
providers: [ Logger ],
declarations: [ AppComponent ],
exports: [ AppComponent ],
Un NgModule raíz siempre tiene un componente raíz que se crea durante el arranque, pero
cualquier NgModule puede incluir cualquier número de componentes adicionales, que se
pueden cargar a través del enrutador o crear a través de la plantilla. Los componentes que
pertenecen a un NgModule comparten un contexto de compilación.
17
Figura 4 - Definición de Vista
En JavaScript cada archivo es un módulo y todos los objetos definidos en este archivo son de
este módulo, otros módulos utilizan la exportación de para acceder a objetos públicos desde
otros módulos. Por ejemplo:
(Angular, 2018)
Ejemplos de importaciones:
import { Component } from '@angular/core';
En el ejemplo anterior, el módulo necesita material desde adentro BrowserModule, para esto se
tiene que agregar a los metadatos con @NgModule imports
imports: [ BrowserModule ],
Con esto utilizamos los sistemas de módulos Angular y JavaScript (Angular, 2018).
18
5.2.2. Componentes
Cada aplicación angular tiene un componente raíz, que conecta una jerarquía de componentes
con el modelo de objetos del documento de página (DOM), cada componente define una clase
que contiene datos y lógica de la aplicación asociada a una plantilla que define una vista.
Angular define una serie de decoradores que asocian tipos específicos de metadatos a las
clases.
Define la lógica de aplicación de un componente, lo que hace para soportar la vista, dentro de
una clase, la clase interactúa con la vista a través de una API de propiedades y métodos.
Por ejemplo:
heroes: Hero[];
selectedHero: Hero;
ngOnInit() {
this.heroes = this.service.getHeroes(); }
(Angular, 2018)
19
5.2.2.1. Metadatos y Componentes
Ejemplo:
@Component({
selector: 'app-hero-list',
templateUrl: './hero-list.component.html',
providers: [ HeroService ] })
Selector: Un selector CSS que dice a angular que cree o inserte una instancia de este
componente donde encuentre la etiqueta correspondiente en la planilla HTML, por ejemplo si el
HTML de una aplicación contiene <app-hero-list></app-hero-list>, Angular inserta una
instancia de la HeroListComponent vista entre esas etiquetas.
20
5.2.3. Plantillas, Directiva y Enlaces de Datos
Una plantilla combina con HTML con marcado angular que puede modificar elementos HMTL
según los datos y la lógica del programa, el enlace de eventos permite que la aplicación
responda a la entrada del usuario actualizando datos de la aplicación.
Angular evalúa las directivas y resuelve la sintaxis de enlace en la plantilla para modificar
elementos en HTML y el DOM.
5.2.3.2. Directivas
21
Directivas Estructurales: Alteran el diseño añadiendo, eliminando y reemplazando elementos
en el DOM, la plantilla de ejemplo utiliza dos directivas estructurales integradas. Las directivas
estructurales son fáciles de reconocer. Un asterisco (*) precede al nombre del atributo de la
directiva como en este ejemplo.
(Angular, 2018)
content_copy<input [(ngModel)]="hero.name">
(Angular, 2018)
<div>
</div>
(Angular, 2018)
22
content_copy export class AppComponent {
color: string;
@Directive({
selector: '[appHighlight]' })
constructor(
@HostListener('mouseenter') onMouseEnter() {
this.highlight('yellow'); }
@HostListener('mouseleave') onMouseLeave() {
this.highlight(null); }
(Angular, 2018)
Vista:
Las aplicaciones angulares están diseñadas con CSS estándar, esto significa que puede aplicar
todo lo que se sabe sobre las hojas de estilo CSS, los selectores, las reglas y las consultas de
23
medios directamente a las aplicaciones de Angular. Además, Angular puede agrupar estilos de
componentes con componentes, lo que permite un diseño más modular que las hojas de estilo
normales, también , pueden definir no solo una plantilla HTML, sino también los estilos CSS que
van con esa plantilla, especificando todos los selectores, reglas y consultas de medios que
necesite.
@Component({
selector: 'app-hero-child',
template: `
<h3>{{hero.name}} says:</h3>
})
(Angular, 2018)
@Component({
selector: 'app-hero-parent',
template: `
[hero]="hero"
[master]="master">
</app-hero-child>`
})
24
export class HeroParentComponent {
heroes = HEROES;
master = 'Master';
(Angular, 2018)
Vista:
@Component({
selector: 'app-name-child',
template: '<h3>"{{name}}"</h3>'
})
@Input()
25
component-interaction / src / app / name-parent.component.ts
@Component({
selector: 'app-name-parent',
template: `
})
} (Angular, 2018)
Vista:
En Angular los Servicios son las herramientas básicas para mantener el estado de la aplicación
y compartir información entre los Controllers y un sistema de Inyección de Dependencia
suministra los objetos dependientes (llamados las dependencias ) cuando crea una instancia de
un objeto.
26
5.2.5.1. Servicios
Para la lógica o los datos que no están asociadas a una vista específica y se desea compartir
con los componentes, se crea una clase servicio. La inyección de dependencia (DI) le permite
mantener las clases de componentes eficientes, no obtienen datos del servidor, validan la
entrada del usuario o inician sesión directamente en la consola.
Ejemplos de servicios:
constructor(
getHeroes() {
});
return this.heroes;
} } (Angular, 2018)
27
5.2.5.2. Inyección de Dependencia
Dependency Inyection es un patrón poderoso para administrar las dependencias de código. Son
más las oportunidades para mejorar la inyección de dependencia para componentes y objetos.
Se usa en todos lados para proporcionar nuevos componentes con los servicios u otras cosas
que se necesiten. (Singh, 2011)
El inyector es el mecanismo principal, Angular crea un inyector para toda la aplicación durante
el proceso de arranque e inyectores adicionales si lo requieren.
Un componente tiene un ciclo de vida administrado por Angular. Lo crea, lo renderiza, crea y
representa a sus hijos, lo revisa cuando cambian sus propiedades de datos y lo destruye antes
de eliminarlo del DOM.
28
Componente Descripción
29
5.2.7. Formularios
Los formularios sirven para ingreso de datos, como también para inicio de sesión, actualizar un
perfil entre otros, angular nos muestra dos enfoques de formularios, los formularios reactivos y
los formularios basados en planillas.
A) Formularios reactivos:
Son más robustas, escalables, reutilizables y comprobables. Son basados en modelos para
manejar las entradas de formularios cuyos valores son cambiantes.
La siguiente tabla resume las diferencias clave entre formas reactivas y las basadas en
planillas.
C) Formas Dinámicas
30
5.2.8. Observables
Proporcionan soporte para pasar mensajes entre editores y suscriptores en la aplicación, entre
sus ventajas podemos decir que tienen programación asíncrona y valores de manejo múltiples.
Definen una función para publicar valores pero solo se ejecuta hasta que un consumidor se
suscribe.
Un observable puede entregar múltiples valores de cualquier tipo como ser: literales, mensajes
o eventos según el contexto. Debido a que tienen muchas ventajas, los observables se usan en
angular y se recomiendan para el desarrollo de aplicaciones.
Figura 11 - Observable
Tipos de notificación:
TIPO DE
DESCRIPCIÓN
NOTIFICACIÓN
next Necesario. Un controlador para cada valor entregado. Se llama cero o más
veces después de que comience la ejecución.
31
complete Opcional. Un controlador para la ejecución: notificación completa. Los
valores demorados pueden continuar entregándose al siguiente controlador
después de que se complete la ejecución.
El constructor observable se usa para crea una secuencia observable de cualquier tipo. El
constructor toma como argumento la función del suscriptor para ejecutar el método suscribe(),
una función de suscriptor recibe un objeto observer y puede publicar valores en el método next()
del observador.
5.2.9. Enrutamiento
Permite definir una ruta de navegación entre los diferentes estados de aplicación y ver
jerarquías en su aplicación, se basa en convenciones de navegación como por ejemplo:
Hacer clic en los botones para retroceder y avanzar en el navegador el cual hace las acciones
correspondientes.
El enrutador interpreta una URL de enlace según las reglas de navegación de la vista de su
aplicación y el estado de los datos. Se puede navegar a otras vistas desde un botón o cuadro
desplegable que funcione, registra la actividad en el historial del navegador. (Angular, 2018)
Ejemplo: Fruteria
app.routing.ts
32
Figura 12 - Ejemplo de Routing en Angular
app.module.ts
Es una biblioteca de programación que utiliza observables que facilita la redacción del código.
Proporciona una implementación de tipo observable, también proporciona funciones de utilidad
para crear y trabajar con observables, estas pueden ser usadas para:
Conversión de código, iterar a través de los valores de una secuencia, mapeo, filtrado de flujos,
componer múltiples transmisiones.
33
Figura 14 - Ejemplo de RxJS
6. ReactJS
React es una biblioteca de JavaScript mantenida por Facebook, para crear interfaces de
usuario y aplicaciones JavaScript reutilizables, con el objetivo de facilitar el desarrollo de una
sola página, es un software libre (open source). Fue lanzado en marzo del 2013 y mantenido
por Facebook. También hay empresas que la utilizan como: Instagram, Dropbox y otras.
Permite un desarrollo ágil y ordenado, aunque React no se encarga de todas las partes
necesarias para hacer una aplicación web compleja, la serie de componentes y herramientas
diversas que se basan en React permite encontrar una alternativa capaz de hacer cualquier
cosa que podríamos hacer con un complejo framework.
La gran particularidad de esta librería es que implementa un Virtual DOM, de tal manera que,
en lugar de renderizar todo el DOM en cada cambio, esto se realiza en una copia en memoria y
después usa un algoritmo para comparar las propiedades de la copia en memoria con las de la
versión del DOM y así aplicar cambios exclusivamente en las partes que varían. En
consecuencia, funciona de una forma mucho más eficiente que el método tradicional.
(digitalhouse.com)
34
6.1. Características de ReactJS
Sirve para desarrollar aplicaciones web de manera ordenada y con menor código, centrada en
el DOM, permite que se asocien las vistas con los datos, si cambian los datos cambian las
vistas.
React también podría ocupar bastante campo en lo que sería el controlador (C de MVC), todo
depende a la manera de trabajar.
Permite isomorfismo, es decir que con el mismo código podemos renderizar tanto en el cliente
como en el servidor cuando llega a un buscador como Google, con la misma base de código se
le puede entregar el HTML con el contenido ya renderizado, lo que lleva a que una aplicación
React sea capaz de posicionarse como una aplicación web tradicional que renderice el lado del
servidor, todo esto consigue con NodeJS.
35
Permite un desarrollo ágil y ordenado, aunque React no se encarga de todas las partes
necesarias para hacer una aplicación web compleja, la serie de componentes y herramientas
diversas que se basan en React nos permite encontrar una alternativa capaz de hacer cualquier
cosa que podríamos hacer con un complejo framework.
Esta librería brinda muchas ventajas en performance, modularidad y promueve un flujo de datos
y eventos muy claro, lo que facilita la planeación y el desarrollo de apps complejas.
La gran particularidad de esta librería es que implementa un Virtual DOM, de tal manera que,
en lugar de renderizar todo el DOM en cada cambio, esto se realiza en una copia en memoria y
después usa un algoritmo para comparar las propiedades de la copia en memoria con las de la
versión del DOM y así aplicar cambios exclusivamente en las partes que varían. En
consecuencia, funciona de una forma mucho más eficiente que el método tradicional.
(digitalhouse.com)
Es un conjunto de etiquetas relacionadas para construir páginas con gran rendimiento para lo
cual conocemos los conceptos de:
DOM: (Document object Model) es una estructura que define todas las etiquetas de una página
HTML, es esencialmente una interfaz de plataforma que proporciona un conjunto estándar de
objetos para representar documentos HTML, XHTML y XML, un modelo estándar sobre cómo
puede combinarse dichos objetos y una interfaz para acceder a ellos y manipularlos. El
responsable del DOM es el Word Wide Web Consortium (W3C). (Caules Alvarez, 2 de Abril de
2017)
Es decir, en vez de renderizar todo el DOM en cada cambio, este hace los cambios en una
copia en memoria y después usa un algoritmo para comparar las propiedades de la copia en
36
memoria con la de la versión del DOM y así aplicar cambios exclusivamente en las partes que
varían.
Para poder trabajar necesitamos instalar primero nodejs y por la línea de comandos: npm install
express y npm install body-parser
Todos los componentes de React pueden incluir propiedades como parámetros para añadir
flexibilidad.
37
6.2.3. React State
Utilizando el concepto de propiedad para añadir flexibilidad a los componentes, las propiedades
son conceptos estáticos y no pueden modificarse, lo cual es un problema porque normalmente
necesitamos cambiar parte de la información que un componente almacena. El estado en React
es la parte del componente con capacidad de almacenar información que puede ser modificada.
(Caules Alvarez, 2 de Abril de 2017)
Figura 18 - Estado
Los componentes de React implementan un método render() que toma datos de entrada y
devuelve lo que se muestra, este ejemplo utiliza una sintaxis similar a XML llamada JSX. Se
puede acceder a los datos de entrada que pasan al componente render() a través de this.props.
Ejemplo:
render() {
return (
<div>
Hello {this.props.name}
</div>
);
}}
38
ReactDOM.render(
<HelloMessage name="Taylor" />,
mountNode
);
(reactjs, 2018)
A demás de tomar datos de entrada (a los que accede a través de this.props), un componente
puede mantener datos de estados internos (a los que accede a través de this.state). Cuando los
datos de estado de un componente cambian, la marcación renderizada se actualizará mediante
una nueva invocación render().
Ejemplo:
40
Aplicación
Usando props y state, podemos armar una pequeña aplicación de Todo. Este ejemplo se
utiliza state para rastrear la lista actual de elementos, así como el texto que el usuario ha
ingresado. Aunque los controladores de eventos parecen estar representados en línea, se
recopilarán e implementarán mediante la delegación de eventos.
41
Figura 24 - Segundo Elemento Insertado
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
render() {
return (
<div>
<h3>TODO</h3>
42
<TodoList items={this.state.items} />
<form onSubmit={this.handleSubmit}>
<label htmlFor="new-todo">
</label>
<input
id="new-todo"
onChange={this.handleChange}
value={this.state.text}
/>
<button>
Add #{this.state.items.length + 1}
</button>
</form>
</div>
);
handleChange(e) {
handleSubmit(e) {
e.preventDefault();
if (!this.state.text.length) {
return;
const newItem = {
text: this.state.text,
id: Date.now()
};
this.setState(state => ({
items: state.items.concat(newItem),
text: ''
}));
43
}
render() {
return (
<ul>
{this.props.items.map(item => (
<li key={item.id}>{item.text}</li>
))}
</ul>
);
(reactjs, 2018)
React es flexible y proporciona enlaces que le permiten interactuar con otras Libraries y
Frameworks. Este ejemplo utiliza una notable biblioteca externa de Markdown, para
convertir el valor de <textarea> en tiempo real.
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
handleChange(e) {
getRawMarkup() {
render() {
return (
<div className="MarkdownEditor">
<h3>Input</h3>
<label htmlFor="markdown-content">
</label>
<textarea
id="markdown-content"
onChange={this.handleChange}
defaultValue={this.state.value} />
<h3>Output</h3>
<div
className="content"
dangerouslySetInnerHTML={this.getRawMarkup()} />
</div>
); }
(reactjs, 2018)
45
6.2.3.4. React y Clases
6.2.3.5. JSX
JSX implica que todo en React es JavaScript: se usa tanto para las plantillas JSX como para la
lógica.
46
Figura 28 - Ejemplo de JSX
HTML:
background: #c00;
47
color: #fff;
display: none;
padding: 20px;
white-space: pre-wrap;
"></div>
<div id="root"></div>
<script>
window.addEventListener('mousedown', function(e) {
document.body.classList.add('mouse-navigation');
document.body.classList.remove('kbd-navigation');
});
window.addEventListener('keydown', function(e) {
if (e.keyCode === 9) {
document.body.classList.add('kbd-navigation');
document.body.classList.remove('mouse-navigation');
});
window.addEventListener('click', function(e) {
e.preventDefault();
});
var text = error ? error.stack || error : message + ' (at ' + source + ':' + line + ':' + col
+ ')';
errors.style.display = '';
};
console.error = (function(old) {
errors.style.display = '';
48
old.apply(this, arguments);
})(console.error);
</script>
(CODEPEN.IO, 2018)
En conclusión, ambas tienen similitud como por ejemplo, ambas son open source, nos permiten
crear proyectos de una manera más rápida, a través de angular o react, ambas están basadas
en componentes que nos permiten separar una aplicación en múltiples componentes, es decir
que este al unirse de nuevo tendría que funcionar.
Ventajas Desventajas
La Popularidad sigue siendo mayor, esto genera que Problemas de migración que
muchos proyectos decidan por Angular como su pueden aparecer al pasar de la
framework de desarrollo client-side versión anterior a la última.
Angular tiene todo en uno, es una solución completa. Menor libertad en la elección de
componentes. Angular propone una
arquitectura definida que puede dar
Angular es atractivo tiene más características y
problemas si el desarrollador quiere
funcionalidades que cualquier otro framework.
experimentar otras opciones para
realizar un proyecto
49
la forma en que el código está estructurado. cuando despliega grandes
cantidades de datos.
50
8.2. Ventajas y desventajas de ReactJS
Ventajas Desventajas
Tiene mejor performance al manejar una gran cantidad React a diferencia de angular no
de datos, debido a que el renderizado es más rápido, posee animaciones, enrutamiento,
por la característica del Virtual DOM. inyección de dependencias o
pruebas por defecto, sino que
nosotros tendríamos que agregarlo
La curva de aprendizaje es menor al requerir
por módulos o partes o crearlos por
básicamente solo el conocimiento de JavaScript.
nosotros mismos, pero ya
encontraremos muchos módulos ya
Ahora si queremos a aprender a utilizar React, también tendremos que aprender a utilizar uno
de estos manejadores de estado, además el núcleo de react es pequeño y debido a esto es
51
fácil de aprender y más natural para las personas que han desarrollado en JavaScript hace
muchos años.
9. Caso de estudio
La instalación: IntelliJ, Webstorm, Angular 2 (Angular CLI 1.7.4), Nodejs, java 1.8.0, maven
3.5.4, SQL Server, configuración de git2.17.0 y un inicializador como inicializador de spring.
Vista de la Interfaz de Usuario del “Sistema de Seguridad Industrial” en Angular 2 (Angular CLI)
52
Figura 32 - Selección de Administración
53
Figura 35 - Lista de Registro de Personal
54
Figura 38 - Lista de Registro de Maquinaria
55
Figura 41 - Lista de Registro de Asignación de Material
56
Figura 44 - Datos de la Compañía
57
Figura 47 - Selección de Administración de Accidentes
58
Figura 50 - Contactos
10. Conclusiones
La gran particularidad de la librería React es que implementa un Virtual DOM, de tal manera
que, en lugar de renderizar todo el DOM en cada cambio, esto se realiza en una copia en
memoria y después usa un algoritmo para comparar las propiedades de la copia en memoria
con las de la versión del DOM y así aplicar cambios exclusivamente en las partes que varían.
En consecuencia, funciona de una forma mucho más eficiente que el método tradicional.
Ambas son open source, nos permiten crear proyectos de una manera más rápida, a través de
angular cli o react, ambas están basadas en componentes que nos permiten separar una
aplicación en múltiples componentes, es decir que este al unirse de nuevo tendría que
funcionar.
React solo es un motor de renderización, no hace routing o comunicación con el servidor, para
esto tiene que buscar terceras librerías para integrarlas a la aplicación y tener todas las
59
capacidades necesarias. Angular en cambio hace una reducción de tiempo en el desarrollo a
través de componentes reutilizables nos permite ser más rápidos en un mundo donde las
metodologías ágiles predominan, el tiempo de respuesta, calidad y muchos otros factores son
cruciales.
Un caso de estudio de Angular fue el proyecto elaborado en el Diplomado, el cual nos mostró
variedad de elementos que facilitan el desarrollo de la interfaz en la aplicación, aprendiendo así
a utilizar el modelo vista controlador (MVC) del framework Angular, juntamente con Gitlab para
la codificación grupal y simultanea que sirvió para actualizar rápidamente los avances del
sistema y de esta manera poder elaborar el proyecto por partes separadas, que en este caso
fue por módulos.
Si lo que interesa es el performance teniendo gran cantidad de datos y/o componentes un buen
candidato es React, si no es muy importante el performance un candidato es Angular. También
dependiendo del conocimiento y experiencia del equipo de desarrollo se puede elegir
cualquiera de las dos.
60
11. Bibliografía
Brad Geen, S. s. (Abril, 2013). AngularJS. En S. s. Brad Geen, AngularJS (pág. 196). Tokio: O'Reilly.
61
medium. (marzo de 2018). @TechMagic. Obtenido de medium:
https://medium.com/@TechMagic/reactjs-vs-angular5-vs-vue-js-what-to-choose-in-2018-
b91e028fa91d
62