├── .gitignore ├── README.md ├── nodegirls-ig.gif ├── package-lock.json ├── package.json ├── public ├── favicon.ico ├── img │ ├── camera.svg │ ├── heart.svg │ ├── home.svg │ ├── left-arrow.svg │ ├── nodegirls.svg │ ├── right-arrow.svg │ └── share.svg ├── index.html ├── logo192.png ├── logo512.png ├── manifest.json └── robots.txt └── src ├── App.css ├── App.js ├── App.test.js ├── components ├── Body.jsx ├── CardFilters.jsx ├── CardPosts.jsx ├── Footer.jsx └── Header.jsx ├── containers └── Home.jsx ├── data ├── filters.js └── userImage.js ├── index.css ├── index.js ├── logo.svg ├── serviceWorker.js └── setupTests.js /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Taller IG con React NodeGirlsMadrid 29F 2 | Bienvenidas!!!! 3 | 4 | > 👉 Las slides de la primera parte [las puedes ver aquí](https://slides.com/yunevk/taller-react-nodegirls/live#/). 5 | 6 | ## ¿Qué vamos a hacer? 7 | Vamos a hacer una app basada (siempre basada, nunca copiada...) en instagram. Así podremos ver las fotos de nuestras compis de taller y presumir de las cosas molonas que estamos haciendo. 8 | 9 | La pinta que esperamos que tenga es esta: 10 | 11 |

12 | Aplicación NodeGirls 13 |

14 | 15 | Con las slides como fondo ya os hemos contado los principales aspectos técnicos de React. Como siempre, la mejor forma de quedarnos con ellos es embarrarnos y cacharrear, así que allá vamos. 16 | 17 | ## ¿Qué pasos vamos a serguir? 18 | 19 | 1. Montaremos el proyecto. 20 | 21 | 2. Haremos un poco de __arquitectura__ básica con los componentes fundamentales. 22 | 23 | 3. Añadiremos los estilos e imágenes necesarias para que luzca. 24 | 25 | 4. Les daremos un poco de vidilla sencilla para empezar, ¿cómo? 26 | * seteando nuestra variable de estado 27 | 28 | * modificando esta variable de estado con __funciones de primer orden__ (no asustarse todavía, nos hacen el favor ;P); 29 | 30 | > :warning: A partir de aquí viene la caña, pero os lo vamos a contar suuuuper bien, así que __nonti preocupare__ (o como se diga). 31 | 32 | 5. Mostraremos los post que están almacenados en el super back que nos ha montado Irene. Aquí van a entrar en juego unos cuantos conceptos y técnicas interesantes como: 33 | * Llamada a la API. 34 | * El hook `useEffect`. 35 | * Renderizado condicional. 36 | * Mapeo de arrays para generar elementos html. 37 | 38 | 6. Cargaremos la imagen que queramos subir. 39 | 40 | 7. Mostraremos los filtros aplicados a nuestra imagen para poder elegir el que más nos favorece. 41 | 42 | 8. Con un elemento `textarea` habilitaremos la opción de subir un comentario a lo Paulo Cohello. 43 | 44 | 9. Cuando ya tengamos todos los datos que compongan cada elemento post, lo subiremos a la base de datos. 45 | 46 | 10. Por último, veremos como manejar los likes y dislikes (por si le damos sin querer me gusta a la foto de ese petardo que nos cae fatal). 47 | 48 | ## Inicializar el proyecto y API 49 | 50 | Antes de empezar con nuestra aplicación de React, tenemos que levantar un servidor con una API para poder conectarnos a ella, pero que no cunda el pánico!! Irene se ha currado una API muy fácil de usar para que no nos tengamos que preocupar para nada del back. ;) 51 | 52 | Así que, en otra instancia de la consola, solo tenemos que ejecutar el siguiente comando: 53 | 54 | ``` 55 | npx github:IrenePEncinar/express-instagram 56 | ``` 57 | 58 | Y así podremos acceder desde `localhost:3000`! Volvamos ahora a nuestra aplicación para conectarnos. 59 | 60 | Ahora sí, vamos a inicializar el proyecto de React: 61 | 62 | 1. Instala `create-react-app` con el comando `npm install -g create-react-app`. 63 | 2. Inicializa el proyecto con el comando: `create-react-app ig-ngm`. 64 | 3. Cambia a la capeta que contiene el código y abre tu IDE. 65 | 66 | ## Arquitectura del proyecto 67 | Como vemos `create-react-app` nos ha creado una estructura básica del proyecto. La magia la vamos a hacer dentro de la capeta `src` y vamos a dividir nuestro código entre los componentes de UI o _dummies_ y los compoenents que se responsabilizan de las 68 | acciones o _containers_. 69 | 70 | En nuestro caso, solo tendremos un componente _container_ que le vamos a llama `Home.jsx` y el resto serán componentes de UI. 71 | 72 | Como primer paso, vamos a crear la estructura de carpetas que necesitaremos: 73 | 74 | ``` 75 | src/ 76 | components/ 77 | Body.jsx 78 | Footer.jsx 79 | Header.jsx 80 | containers/ 81 | Home.jsx 82 | ``` 83 | ## Añadiendo estilos e imágenes 84 | 85 | Antes de empezar con la caña, vamos a añadir primero los archivos necesarios para que nuestra aplicación luzca bien. 86 | 87 | Hemos preparado este CSS para que lo insertes en `index.css`, con las clases que utilizaremos a continuación. Por eso, solo tienes que acceder a [este enlace](https://raw.githubusercontent.com/Maritxis/ig-ngm-pruebas/master/src/index.css), copiar el código y pegarlo en tu archivo `index.css`. 88 | 89 | No solo vamos a añadir estilos, también tendremos algunos iconos. Recuerda que los archivos estáticos de la aplicación (como las imágenes) las tienes que añadir dentro la carpeta `public` que se ha generado con `create-react-app`. Por eso, necesitamos una estrcutura así: 90 | 91 | ``` 92 | public/ 93 | img/ 94 | ``` 95 | 96 | Es decir, vamos a crear una carpeta `img` dentro de `public`. Dentro de esta carpeta añadiremos los siguientes iconos (abre cada enlace para copiar su contenido): 97 | 98 | - [`camera.svg`](https://raw.githubusercontent.com/Maritxis/ig-ngm-pruebas/master/public/img/camera.svg) 99 | - [`heart.svg`](https://raw.githubusercontent.com/Maritxis/ig-ngm-pruebas/master/public/img/heart.svg) 100 | - [`home.svg`](https://raw.githubusercontent.com/Maritxis/ig-ngm-pruebas/master/public/img/home.svg) 101 | - [`left-arrow.svg`](https://raw.githubusercontent.com/Maritxis/ig-ngm-pruebas/master/public/img/left-arrow.svg) 102 | - [`nodegirls.svg`](https://raw.githubusercontent.com/Maritxis/ig-ngm-pruebas/master/public/img/nodegirls.svg) 103 | - [`right-arrow.svg`](https://raw.githubusercontent.com/Maritxis/ig-ngm-pruebas/master/public/img/right-arrow.svg) 104 | - [`share.svg`](https://raw.githubusercontent.com/Maritxis/ig-ngm-pruebas/master/public/img/share.svg) 105 | 106 | > ⚠️ Para no extender más el taller, vamos a tener todo el código CSS en un archivo, pero lo ideal es que el código CSS relativo a cada componente esté en archivos diferentes, y sea cada componente el que importe su archivo CSS. Esta refactorización la puedes hacer después. 😉 107 | 108 | Por último, tendremos que añadir los estilos para poder mostrar los filtros, y para eso vamos a usar [CSSGram](https://una.im/CSSgram/). Es muy fácil añadirlo! Solo tienes que incluir la siguiente línea en tu archivo `/public/index.html`, más concretamente dentro de la etiqueta ``. 109 | 110 | ``` 111 | 112 | ``` 113 | 114 | Ya tenemos nuestro _setup_, así que continuamos con los componentes. 115 | 116 | ## Montando los componentes básicos: Header, Body y Footer 117 | 118 | Vamos a tener tres componentes básicos en nuestra página (a parte de dos más que nos permitirán tener el código separado por responsabilidades independientes). Estos son: 119 | * **Header** 120 | * **Body** (que va a ser la parte principal de la aplicación) 121 | * **Footer** 122 | 123 | Vamos a crear la estructura básica de un componente en React: 124 | 125 | ```js 126 | import React from 'react'; 127 | 128 | const Component = () => ({}); 129 | 130 | export default Component; 131 | ``` 132 | Este paso lo repetiremos para cada uno de los componentes con sus correspondientes nombres. 133 | 134 | Como inicialmente queremos saber que están ahí, podéis darle un poco de contenido, un `button` un `header` o cualquier cosa que os apetezca. __Any way__, si levantamos la aplicación (por si alguien ha olvidado el comando __menos utilizado__ en la historia: ```npm start```), todavía no vamos a ver nada, __niente__, __nothing de nothing__... y ¿porqueéééééé? pues sencillamente, porque no hay nadie que haga uso de estos componentes. Creemos pues `Home` el elemento __Body__ e incluyamos nuestros __dummies__ pero __loved__, components. 135 | 136 | ```js 137 | import React from 'react'; 138 | import Header from '../components/Header'; 139 | import Body from '../components/Body'; 140 | import Footer from '../components/Footer'; 141 | 142 | const Home = () => { 143 | return ( 144 | <> 145 |
146 | 147 |