Aplicaciones universales/isomórficas
Clase 56 de 58 • Curso Profesional de React con Redux 2016
Contenido del curso
Fundamentos
- 3

¿Qué es React?
05:12 min - 4

Hola Mundo con React
07:31 min - 5

¿Qué es y cómo funciona el Virtual DOM?
05:39 min - 6

Introducción a JSX
03:58 min - 7

Creación de componentes
13:21 min - 8

Componentes Puros vs de Estado
03:57 min - 9

Ciclo de vida de un componente
10:23 min - 10

Ciclo de vida de componentes
04:19 min - 11

Manejo de eventos del DOM
04:31 min - 12

Event handlers con parámetros personalizados
03:46 min - 13

Contexto de la aplicación
05:19 min - 14

Componentes de Alto Orden (HOC) y Mixins
08:22 min
Creación del proyecto
- 15

Presentación del proyecto
01:01 min - 16

Instalación de Node.js y usando npm
04:44 min - 17

Estructura de archivos
05:02 min - 18

Iniciar un servidor de render básico - Render en Server
03:40 min - 19

Module bundlers en JavaScript
06:02 min - 20

Configurar Webpack para el servidor de render
09:23 min - 21

Crear una app con React y React Router
04:21 min - 22

Manejo de rutas en el servidor con React Router
14:45 min - 23

Crear cliente para consumir el API
05:04 min - 24

Iniciar la app en el navegador y configurar Webpack para producción
08:58 min - 25

Iniciar un servidor de estáticos con zeit/list
04:33 min - 26

Herramientas de desarrollo de React
03:22 min - 27

Consumir el API y mostrar datos en la home
10:16 min - 28

Perfil de usuarios
08:13 min - 29

Estado de cargando y detalle de post
07:46 min - 30

Paginación de posts mediante scroll infinito
06:42 min - 31

Mostrar listado de comentarios en cada post
02:56 min - 32

Estilizar componentes con CSS Modules
18:43 min - 33

Linter y buenas prácticas con ESLint
22:21 min - 34

Internacionalización con React Intl
17:57 min - 35

Deploy a producción
27:30 min
Implementación de Redux
- 36

Patrones de arquitectura de aplicaciones Frontend
05:35 min - 37

Implementación inicial con Redux para los posts
20:37 min - 38

Uso de middlewares
08:39 min - 39

Acciones asíncronas
09:11 min - 40

Dividir el reducer en funciones más pequeñas y combinarlas
12:16 min - 41

Datos inmutables con Immutable.js
14:00 min - 42

Herramientas de desarrollo
08:08 min - 43

Conclusiones
02:02 min - 44

Pruebas automatizadas de reducers
09:03 min - 45

Pruebas de componentes de React
10:33 min - 46

Actualizando a la última versión de React Router
03:51 min
Desafíos
Contenido bonus
- 51

Glosario
03:47 min - 52

Evitar que webpack genere el CSS durante el build del servidor
00:57 min - 53

LazyLoad de imágenes
08:07 min - 54

Animaciones con ReactCSSTransitionGroup
07:31 min - 55

Server render con Next.js
11:53 min - 56

Aplicaciones universales/isomórficas
Viendo ahora - 57

Iniciar proyectos con create-react-app
04:34 min - 58

Diplomado de desarrollo de aplicaciones con ReactJS
00:38 min
Ya sea usando aprendiendo React.js, o JavaScript en general, seguramente hayas escuchado el término Aplicaciones universales o Aplicaciones isomórficas y si estás aprendiendo JS probablemente te preguntes que signifca.
Una aplicación universal es aquella que comparte todo (o casi todo) su código entre el cliente y el servidor. Por poner un ejemplo si tenemos una función como esta:
function sayHello() { console.log('hello world'); }
Ese código es universal ya que podemos usarlo tanto en un navegador (cliente) como en Node.js (servidor), entonces en vez de escribir esta función, que puede ser muy simple o muy compleja, dos veces, podemos entonces compartirla entre ambos entornos de ejecución.
Ahora pongamos un ejemplo un poco más complejo y usando React.js
import React from 'react'; import { Match, Miss } from 'react-router'; import Home from './Home'; import Header from '../components/Header'; function Pages() { return ( <main role="application"> <Header /> <Match pattern="/" exactly component={Home} /> {/* Otras rutas de nuestra aplicación */} <Miss component={Error404} /> </main> ); } export default Pages;
Este componente (que es el que una versión simplificada del usado en el curso) es 100% universal ya que no hay absolutamente ningún código ahí que solo funcione en un navegador o en un sevidor, eso hace posible ejecutar este código en ambos entornos (como vemos en el curso al usarlo para hacer server render).
Cosas que no pueden ser universales
Hay muchas cosas que se pueden hacer en JS que no son universales. En lo navegadores por ejemplo existe el DOM (document, window), Geolocation, XMLHttpRequest, Fetch, notificaciones, WebWorkers, ServiceWorkers, etc.
De la misma forma el servidor posee cosas como http, fs, net, etc. que no son universales ya que un navegador no puede iniciar un servidor HTTP o TCP o interactuar con el sistema de archivos directamente.
Cosas que sí pueden ser universales
De la misma forma muchas cosas se pueden hacer universales, como sistema de templates (que generen strings con HTML) son un ejemplo, hay otras cosas que si bien se manejan diferentes se puede detectar el entorno para saber si es un servidor o un navegador y ejecutar código acorde.
React por ejemplo es universal, pero al moment de renderizarlo tenemos react-dom y react-dom/server, la librería isomorphich-fetch internamente detecta si se ejecuta en un servidor o un navegador (y si este soporte Fetch) para saber si tiene que exportar una función que haga la petición y como hacerlo internamente (por http.request o por XMLHttpRequest).
¿Para que sirve hacer código universal?
Historicamente el frontend se hace con JS y el backend con otro lenguajes y frameworks (como Python y Django o RoR, gracias a Node.js fue posible empezar a compartir código entre servidor y cliente.
Esto hizo que mucho código que historicamente se duplicaba (como el manejo de rutas) ahora es posible escribirlo una vez y usarlos en dos lugares. Lo que se traduce es menores tiempos de desarrollo, debido a que ahora mucho código es compartido y no es necesario reescribir nada.