Crear una app con React y React Router
Clase 21 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
Viendo ahora - 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
02:04 min - 57

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

Diplomado de desarrollo de aplicaciones con ReactJS
00:38 min
React Router es una librería que se actualiza constantemente, es por eso que vale la pena estar al tanto de los cambios para que tu aplicación no se vea afectada. Si estás usando React.js o React Native puedes seguir este tutorial de React Router, herramienta que sirve para cambiar de rutas dentro de tu aplicación sin recargar el navegador.
Es importante que leas este material si estás tomando el curso, pues la siguiente clase tiene conceptos que no han sido actualizados, pero recuerda que ya estamos trabajando en la renovación de este curso y pronto estará disponible.
Vamos a crear una app con React y React Router la cual nos ayudará a manejar nuestras rutas en nuestra aplicación single page.
Primero vamos a instalar create-react-app para no tener que instalar y configurar manualmente webpack. Como extra tendremos hot loader que refrescará el navegador automáticamente con cada cambio que hagamos.
npm install -g create-react-app
Una vez instalado creamos nuestra app.
create-react-app fancy-blog
En nuestro editor favorito abrimos la carpeta que se creó, que en este caso se llama fancy-blog. Ahí veremos la siguiente estructura.
public src package.json README.md
En la carpeta public van los archivos estáticos como imágenes, html y demás. En src va nuestro código, y package.json es donde registramos nuestros paquetes y configuraciones de nuestra app.
Nos falta agregar los paquetes para usar React Router en nuestra app, y para crear nuestra API con contenido dummy usaremos faker
npm install -S react-router-dom faker
Ya podemos empezar con nuestro código. Primero debemos crear la estructura, así que creamos las siguientes carpetas en src.
src/ pages/ components/ data/
Ahora vamos a hacer nuestro menú, para lo que crearemos el componente en src/components/menu.js
import React from 'react'; import { Link } from 'react-router-dom'; const Menu = () => ( <nav> <ul> <Link to="/">Home</Link> <Link to="/about">About</Link> <Link to="/posts">Posts</Link> </ul> </nav> ) export default Menu;
Lo siguiente en crear nuestras páginas.
En src/pages/home.js
import React from 'react'; import Menu from '../components/menu'; const Home = () => ( <section> <Menu /> <h3>Home Platzi</h3> <p>Aprende de expertos en programación, diseño, marketing, startups, video y web. Suscríbete hoy.</p> </section> ); export default Home;
src/pages/about.js
import React, { Component } from 'react'; import Menu from '../components/menu'; const About = () => ( <section> <Menu /> <h3>About Platzi</h3> <p>Aprende de expertos en programación, diseño, marketing, startups, video y web. Suscríbete hoy.</p> </section> ); export default About;
src/pages/posts.js
import React, { Component } from 'react'; import { Link, Route } from 'react-router-dom'; import posts from '../data/posts'; import Menu from '../components/menu'; class Posts extends Component { render() { return ( <section className="posts"> <Menu /> <h3>Posts</h3> {posts.map(post => <article key={post.id} className="post"> <Link to={`/post/${post.id}`}> <h4>{post.title}</h4> <p>{post.excerpt}</p> <span>{post.author}</span> </Link> </article> )} </section> ) } } export default Posts;
y por último un post en src/pages/post.js
import React, { Component } from 'react'; import posts from '../data/posts'; import Menu from '../components/menu'; class Post extends Component { render() { const { match } = this.props; let post = posts.filter(post => post.id === parseInt(match.params.postId)); post = post[0]; return ( <section> <Menu /> <div className="post-section"> <h2>{post.title}</h2> <p>{post.content}</p> </div> </section> ) } } export default Post;
Como ves, estamos llamando los posts, y como no existen nos va a marcar un error. Los podemos crear en src/data/posts.js, aquí usaremos la librería faker para ayudarnos a crear una api sin mucho esfuerzo.
import faker from 'faker'; let posts = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; posts = posts.map(post => { return { id: post, title: faker.lorem.sentence(), excerpt: faker.lorem.sentences(10), content: faker.lorem.sentences(100), author: faker.name.findName() } }); export default posts;
Para ver nuestra app corriendo debemos modificar el archivo app.js en src en donde usaremos el router.
import React, { Component } from 'react'; import { BrowserRouter as Router, Route, } from 'react-router-dom'; import Home from './pages/home'; import About from './pages/about'; import Posts from './pages/posts'; import Post from './pages/post'; class App extends Component { render() { return ( <Router> <div className="container"> <Route exact path="/" component={Home} /> <Route path="/about" component={About} /> <Route path="/posts" component={Posts} /> <Route path="/post/:postId" component={Post} /> </div> </Router> ); } } export default App;
Guardamos los cambios y corremos el siguiente comando, el cual nos abrirá la app en el navegador para ver todo lo que hemos hecho.
npm run start