<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Roberto Monge Sencades</title>
    <description>The latest articles on DEV Community by Roberto Monge Sencades (@robertomsen).</description>
    <link>https://dev.to/robertomsen</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1018378%2F1923fa5c-73dc-4e97-b190-dce022164656.jpeg</url>
      <title>DEV Community: Roberto Monge Sencades</title>
      <link>https://dev.to/robertomsen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/robertomsen"/>
    <language>en</language>
    <item>
      <title>Desarrollando un clon de instagram en React IV - Implementando Lazy Loading y Links en los Navs</title>
      <dc:creator>Roberto Monge Sencades</dc:creator>
      <pubDate>Sat, 25 Feb 2023 12:54:17 +0000</pubDate>
      <link>https://dev.to/robertomsen/desarrollando-un-clon-de-instagram-en-react-iv-implementando-lazy-loading-y-links-en-los-navs-gbn</link>
      <guid>https://dev.to/robertomsen/desarrollando-un-clon-de-instagram-en-react-iv-implementando-lazy-loading-y-links-en-los-navs-gbn</guid>
      <description>&lt;p&gt;Bienvenidos al post número cuatro de nuestro proyecto "Desarrollando un clon de Instagram en React".&lt;/p&gt;

&lt;p&gt;En este post, implementaremos Lazy Loading en las distintas rutas, para que nuestra velocidad y optimización sea mucho mejor.&lt;/p&gt;

&lt;p&gt;Además, implementaremos los links del navbarTop, para que vayan a las rutas que hemos definido anteriormente.&lt;/p&gt;

&lt;p&gt;Vamos a ello!&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementando Lazy Loading en nuestro proyecto
&lt;/h2&gt;

&lt;p&gt;Para comenzar, empezaremos explicando que es Lazy Loading.&lt;/p&gt;

&lt;p&gt;Llamamos Lazy Loading a la carga diferida.&lt;/p&gt;

&lt;p&gt;Cuando abrimos un sitio web, en nuestro caso nuestra aplicación, el navegador carga todos los recursos necesarios para que nuestra aplicación se muestre adecuadamente. Normalmente, carga todas las páginas, las que vemos, y las que no, asi como sus componentes, imports etc.&lt;/p&gt;

&lt;p&gt;Con Lazy Loading, lo que hacemos es que en lugar de cargar todo el contenido de la aplicación. Por medio de Lazy Loading solo se descarga el contenido visible en el área actual de la pantalla.&lt;/p&gt;

&lt;p&gt;De este modo, si estamos en la ruta principal, llamaremos y cargaremos la pagina Home, con sus componentes correspondientes.&lt;/p&gt;

&lt;p&gt;Con esto, lo que conseguimos, es no cargar las demás páginas, y solo cargarlas, cuando las llamemos.&lt;/p&gt;

&lt;p&gt;En React, utilizamos &lt;code&gt;Lazy&lt;/code&gt; y &lt;code&gt;Suspense&lt;/code&gt; para realizar la carga perezosa (Lazy Loading).&lt;/p&gt;

&lt;p&gt;Ahora que entendemos que es, y como funciona Lazy Loading, llego la hora de implementarlo en nuestro proyecto.&lt;/p&gt;

&lt;p&gt;Para ello, vamos a ir a nuestro componente raíz, donde tenemos nuestras rutas, asi que vamos a &lt;code&gt;App.jsx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8rd5an6koqi90pj9gqr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8rd5an6koqi90pj9gqr.png" alt=" " width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como primer paso, es importar lazy y Suspense, para ello, utilizaremos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Suspense&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora que tenemos importado Lazy y Suspense, utilizaremos lazy para importar nuestras páginas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./pages/Home/Home&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Profile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./pages/Profile/Profile&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./pages/Search/Search&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto, hemos importado las distintas páginas con Lazy.&lt;/p&gt;

&lt;p&gt;Lo siguiente a utilizar es Suspense, pero, ¿Que es Suspense?&lt;/p&gt;

&lt;p&gt;Suspense es un componente que importamos de React. Este componente captura cualquier promesa que sea lanzada en tiempo de render.&lt;/p&gt;

&lt;p&gt;Nosotros lo utilizaremos para englobar nuestras rutas, de este modo, pasandole un fallback, podremos mostrar lo que queramos mientras el componente Lazy se esta cargando.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyu6aueqed914liwqlr2r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyu6aueqed914liwqlr2r.png" alt=" " width="800" height="661"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En el fallback, le hemos pasado la página &lt;code&gt;Loading&lt;/code&gt;, es un loading con un componente &lt;code&gt;Spinner&lt;/code&gt; en el centro.&lt;/p&gt;

&lt;p&gt;Con esto, tendríamos nuestro lazy loading creado, y ¿como lo comprobamos? pues utilizaremos Inspeccionar Elemento de &lt;br&gt;
Google Chrome.&lt;/p&gt;

&lt;p&gt;Iremos a &lt;code&gt;Fuentes&lt;/code&gt; y recargaremos la página vaciando el cache.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8tm22np4p0eoci6d7smq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8tm22np4p0eoci6d7smq.png" alt=" " width="800" height="840"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos comprobar, en la carpeta &lt;code&gt;Pages&lt;/code&gt; se han cargado dos componentes, &lt;code&gt;Home&lt;/code&gt; y &lt;code&gt;Loading&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Loading se ha cargado mientras se carga la página &lt;code&gt;Home&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ahora, seguiremos con los links a las distintas rutas.&lt;/p&gt;
&lt;h2&gt;
  
  
  Implementando links en los Navs
&lt;/h2&gt;

&lt;p&gt;El siguiente paso es implementar los links, utilizando &lt;code&gt;react-router-dom&lt;/code&gt; es un poco distinto a un link normal, puesto que habrá que utilizar el componente &lt;code&gt;Link&lt;/code&gt; de &lt;code&gt;react-router-dom&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para ello, vamos a ir a &lt;code&gt;NavbarBottom.jsx&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;Importaremos el componente &lt;code&gt;Link&lt;/code&gt; de &lt;code&gt;react-router-dom&lt;/code&gt; de esta manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Link&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-router-dom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ya por último, será enblogbar nuestras imagenes del menú con nuestro componente &lt;code&gt;Link&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Al componente &lt;code&gt;Link&lt;/code&gt; hay que pasarle una prop llamada &lt;code&gt;to&lt;/code&gt;, en ella, hay que pasarle el nombre de la ruta a la que vamos a ir.&lt;/p&gt;

&lt;p&gt;De este modo, nuestro componente quedaría así:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0x99xuygej1mketszb3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0x99xuygej1mketszb3.png" alt=" " width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con esto, ya tendríamos nuestro componente listo para ir a las distintas rutas.&lt;/p&gt;

&lt;p&gt;Hemos terminado nuestro Lazy Loading, para la carga diferida de nuestra página, y ya hemos implementado nuestros &lt;code&gt;Link&lt;/code&gt;para la redirección a nuestras rutas.&lt;/p&gt;

&lt;p&gt;En el post número cinco, realizaremos el componente &lt;code&gt;Stories&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;El enlace al repositorio os lo dejo por aquí, podeis aportar cualquier cambio mediante pull request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/robertomsen/clone-instagram-react" rel="noopener noreferrer"&gt;Repositorio clone-instagram-react&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cryptocurrency</category>
      <category>bitcoin</category>
      <category>crypto</category>
    </item>
    <item>
      <title>Desarrollando un clon de Instagram en React III - Implementando las rutas, ESLint y Prettier</title>
      <dc:creator>Roberto Monge Sencades</dc:creator>
      <pubDate>Sun, 19 Feb 2023 19:41:34 +0000</pubDate>
      <link>https://dev.to/robertomsen/desarrollando-un-clon-de-instagram-en-react-implementando-las-rutas-eslint-y-prettier-2hik</link>
      <guid>https://dev.to/robertomsen/desarrollando-un-clon-de-instagram-en-react-implementando-las-rutas-eslint-y-prettier-2hik</guid>
      <description>&lt;p&gt;Bienvenidos al post número tres de nuestra pequeña aventura.&lt;/p&gt;

&lt;p&gt;En este post, implementaremos las rutas mediante la librería &lt;code&gt;react-router-dom&lt;/code&gt;, además, implementaremos las librerías ESLint y Prettier, para organizar el código, saltos de linea, y evitarnos algunos errores gracias a las normas de ESLint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementando ESLint y Prettier
&lt;/h2&gt;

&lt;p&gt;Comenzaremos implementando ESLint y Prettier, pero para empezar, explicaremos que son estas dos herramientas.&lt;/p&gt;

&lt;p&gt;ESLint: Es un linter de código JavaScript. Su función es analizar el código de nuestra aplicación, detectar problemas en por medio de patrones y si esta a su alcance resolverlos él mismo.&lt;/p&gt;

&lt;p&gt;Por otro lado, Prettier es un formateador de código. Tambien analiza nuestro código JavaScript.&lt;/p&gt;

&lt;p&gt;Utilizando ambos, conseguiremos tener un código más limpio, con menos errores y estructurado mediante unas normas especificas que definiremos mediante los ficheros de configuración.&lt;/p&gt;

&lt;p&gt;Comenzamos instalando los paquetes:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm i prettier eslint-config-prettier eslint-plugin-prettier -D&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
O, si utilizas yarn:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn add prettier eslint-config-prettier eslint-plugin-prettier -D&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Una vez instalados los paquetes, comenzaremos creando un fichero llamado &lt;code&gt;.eslintrc&lt;/code&gt;, en el, insertaremos la configuración.&lt;/p&gt;

&lt;p&gt;Comenzaremos diciendo al fichero de configuración que estamos desarrollando en React, y que utilizaremos el plugin de Prettier.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;  
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;extends&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;plugin:prettier/recommended&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto, ya tendremos ESLint listo con la configuración recomendada para React.&lt;/p&gt;

&lt;p&gt;El siguiente paso será crear un fichero para la configuración de Prettier, lo llamaremos &lt;code&gt;.pretierrc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;En este fichero, insertaremos la siguiente configuración:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"semi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tabWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"printWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"singleQuote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trailingComma"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"jsxBracketSameLine"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En esta configuración, estamos diciendo que utilizaremos ';' en el final de las sentencias, el número de espacios al tabular, en este caso, dos. Utilización de comillas dobles o simples.&lt;/p&gt;

&lt;p&gt;Una vez realizada la configuración, solo necesitarás instalar las extensiones ESLint y Prettier en tu editor de código favorito, en mi caso, en VSCode.&lt;/p&gt;

&lt;p&gt;Y ya estaría listo!&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementando las rutas de la aplicación con &lt;code&gt;react-router-dom&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Vamos a implementar las rutas para nuestro clon de instagram, de esta manera, podemos separar la logica en distintas rutas, facilitando y mejorando el código y la usabilidad.&lt;/p&gt;

&lt;p&gt;El primer paso, es instalar &lt;code&gt;react-router-dom&lt;/code&gt;, para ello, lo instalaremos con NPM o Yarn.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install react-router-dom&lt;/code&gt; o si utilizas Yarn, &lt;code&gt;yarn add react-router-dom&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Una vez instalado, necesitamos colocar las rutas en el fichero que se carga cuando se inicia la aplicación, en nuestro caso, en &lt;code&gt;App.jsx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Antes de nada, hay que crear las páginas que vamos a tener en nuestra aplicación, comenzaremos con tres: &lt;code&gt;Home&lt;/code&gt;, &lt;code&gt;Profile&lt;/code&gt; y &lt;code&gt;Search&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para ellos, vamos a crear una carpeta llamada &lt;code&gt;pages&lt;/code&gt; dentro de la carpeta &lt;code&gt;src&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Después, crearemos una carpeta con cada página, y dentro de ella, dos ficheros básicos, el JSX y el CSS.&lt;/p&gt;

&lt;p&gt;Una vez creado, tendrá que quedar algo así:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwv5ukscrsn1wlegcxn7s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwv5ukscrsn1wlegcxn7s.png" alt=" " width="526" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Todos los ficheros JSX tienen que tener su función creada, por ejemplo, en Home:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./Home.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Home&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Home&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ya tenemos nuestras páginas creadas, y el próximo paso es crear las rutas y enlazarlas a nuestras páginas.&lt;/p&gt;

&lt;p&gt;Vamos al fichero App.jsx e importaremos las siguiente funciones:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import { BrowserRouter, Route, Routes } from "react-router-dom";&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BrowserRouter:&lt;/strong&gt; Este inyecta propiedades a nuestro componente para poder acceder al historial de navegación, realizar redirecciones, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Route:&lt;/strong&gt; Route: Es el componente que utilizamos para crear nuestras rutas a otros páginas.&lt;/p&gt;

&lt;p&gt;El código debe quedar de esta manera una vez importado, y pasaremos a explicar el funcionamiento.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;BrowserRouter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Routes&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-router-dom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./pages/Home/Home&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Profile&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./pages/Profile/Profile&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Search&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./pages/Search/Search&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;BrowserRouter&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Routes&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Route&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Route&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/profile&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Profile&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Route&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/search&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Search&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Routes&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/BrowserRouter&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En el componente App, hemos importado las páginas Home, Profile y Search.&lt;/p&gt;

&lt;p&gt;Como siguiente paso, hemos llamado al componente &lt;code&gt;&amp;lt;BrowserRouter&amp;gt;&lt;/code&gt;, en este componente, englobaremos toda la funcionalidad de las rutas.&lt;/p&gt;

&lt;p&gt;Lo siguiente, es implementar &lt;code&gt;&amp;lt;Routes&amp;gt;&lt;/code&gt;, dentro de el, insertaremos todas las rutas de la aplicación.&lt;/p&gt;

&lt;p&gt;Y por último, implementaremos &lt;code&gt;&amp;lt;Route&amp;gt;&lt;/code&gt; por cada ruta, a este componente, hay que pasarle dos valores, el path, en el que indicaremos que ruta vamos a asignar al elemento de la página que asignamos.&lt;/p&gt;

&lt;p&gt;Con element, asignaremos el componente que se va a renderizar cuando se llame a esa ruta.&lt;/p&gt;

&lt;p&gt;Con esto, tendríamos nuestras tres primeras rutas listas para funcionar.&lt;/p&gt;

&lt;p&gt;Como dato importante, hay que saber que cuando se levanta la aplicación, la ruta por defecto que se ve es &lt;code&gt;/&lt;/code&gt;. De ahi, que insertemos el Home como página inicial.&lt;/p&gt;

&lt;p&gt;Acabamos nuestro tercer post con ESLint, Prettier y las rutas implementadas.&lt;/p&gt;

&lt;p&gt;En el próximo post, crearemos el componente &lt;code&gt;&amp;lt;Stories&amp;gt;&lt;/code&gt; e implementaremos los componentes &lt;code&gt;&amp;lt;NavbarTop&amp;gt;&lt;/code&gt; y &lt;code&gt;&amp;lt;NavbarBottom&amp;gt;&lt;/code&gt; en nuestra página Home.&lt;/p&gt;

&lt;p&gt;El enlace al repositorio os lo dejo por aquí, podeis aportar cualquier cambio mediante pull request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/robertomsen/clone-instagram-react" rel="noopener noreferrer"&gt;Repositorio clone-instagram-react&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>discuss</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Desarrollando un clon de instagram en React II - Desarrollando los Nav</title>
      <dc:creator>Roberto Monge Sencades</dc:creator>
      <pubDate>Tue, 31 Jan 2023 18:45:05 +0000</pubDate>
      <link>https://dev.to/robertomsen/desarrollando-un-clon-de-instagram-en-react-parte-2-21kp</link>
      <guid>https://dev.to/robertomsen/desarrollando-un-clon-de-instagram-en-react-parte-2-21kp</guid>
      <description>&lt;p&gt;Comenzamos con el post número dos de nuestra pequeña aventura.&lt;/p&gt;

&lt;p&gt;En este post veremos como desarrollar el &lt;code&gt;&amp;lt;NavbarBottom&amp;gt;&lt;/code&gt; y el &lt;code&gt;&amp;lt;NavbarTop&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyacqm5edd3hpruinsyvc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyacqm5edd3hpruinsyvc.png" alt="Image description" width="586" height="64"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Antes de nada, necesitamos los iconos para los distintos botones de la aplicación.&lt;/p&gt;

&lt;p&gt;Estos los podemos sacar de la aplicación web de instagram, son SVGs, por lo que copiaremos el svg, crearemos un archivo svg por cada elemento dentro de la carpeta &lt;code&gt;assets&lt;/code&gt;, (más adelante manejaremos mejor los ficheros) e insertaremos el código.&lt;/p&gt;

&lt;p&gt;Os dejaré por aquí los SVG de los distintos iconos para que los tengais.&lt;/p&gt;

&lt;p&gt;Home:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" width="24" height="24"&amp;gt;
&amp;lt;path d="M22 23h-6.001a1 1 0 0 1-1-1v-5.455a2.997 2.997 0 1 0-5.993 0V22a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V11.543a1.002 1.002 0 0 1 .31-.724l10-9.543a1.001 1.001 0 0 1 1.38 0l10 9.543a1.002 1.002 0 0 1 .31.724V22a1 1 0 0 1-1 1Z"&amp;gt;&amp;lt;/path&amp;gt;&amp;lt;/svg&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" width="24" height="24"&amp;gt;&amp;lt;path d="M19 10.5A8.5 8.5 0 1 1 10.5 2a8.5 8.5 0 0 1 8.5 8.5Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&amp;gt;&amp;lt;/path&amp;gt;&amp;lt;line fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" x1="16.511" x2="22" y1="16.511" y2="22"&amp;gt;&amp;lt;/line&amp;gt;&amp;lt;/svg&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reels:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" width="24" height="24"&amp;gt;
&amp;lt;line fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="2" x1="2.049" x2="21.95" y1="7.002" y2="7.002"&amp;gt;&amp;lt;/line&amp;gt;&amp;lt;line fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" x1="13.504" x2="16.362" y1="2.001" y2="7.002"&amp;gt;&amp;lt;/line&amp;gt;&amp;lt;line fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" x1="7.207" x2="10.002" y1="2.11" y2="7.002"&amp;gt;&amp;lt;/line&amp;gt;&amp;lt;path d="M2 12.001v3.449c0 2.849.698 4.006 1.606 4.945.94.908 2.098 1.607 4.946 1.607h6.896c2.848 0 4.006-.699 4.946-1.607.908-.939 1.606-2.096 1.606-4.945V8.552c0-2.848-.698-4.006-1.606-4.945C19.454 2.699 18.296 2 15.448 2H8.552c-2.848 0-4.006.699-4.946 1.607C2.698 4.546 2 5.704 2 8.552Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&amp;gt;&amp;lt;/path&amp;gt;&amp;lt;path d="M9.763 17.664a.908.908 0 0 1-.454-.787V11.63a.909.909 0 0 1 1.364-.788l4.545 2.624a.909.909 0 0 1 0 1.575l-4.545 2.624a.91.91 0 0 1-.91 0Z" fill-rule="evenodd"&amp;gt;&amp;lt;/path&amp;gt;&amp;lt;/svg&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Messages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" width="24" height="24"&amp;gt;&amp;lt;path d="M22.91 2.388a.69.69 0 0 0-.597-.347l-20.625.002a.687.687 0 0 0-.482 1.178L7.26 9.16a.686.686 0 0 0 .778.128l7.612-3.657a.723.723 0 0 1 .937.248.688.688 0 0 1-.225.932l-7.144 4.52a.69.69 0 0 0-.3.743l2.102 8.692a.687.687 0 0 0 .566.518.655.655 0 0 0 .103.008.686.686 0 0 0 .59-.337L22.903 3.08a.688.688 0 0 0 .007-.692" fill-rule="evenodd"&amp;gt;&amp;lt;/path&amp;gt;&amp;lt;/svg&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y por último, para la foto de perfil, podeis utilizar la imagen que queráis.&lt;/p&gt;

&lt;p&gt;Ahora que ya tenemos las imagenes, vamos con el desarrollo del componente:&lt;/p&gt;

&lt;p&gt;Para comenzar, creamos una carpeta en la raíz, que llamaremos &lt;code&gt;components&lt;/code&gt;. En esta carpeta, guardaremos todos los componentes generales, que se utilizan en varias páginas, de acuerdo con la arquitectura que vamos a utilizar, Clean Architecture.&lt;/p&gt;

&lt;p&gt;Dentro de &lt;code&gt;components&lt;/code&gt;, vamos a crear otra carpeta que llamaremos &lt;code&gt;NavbarBottom&lt;/code&gt;, y dentro de ella, vamos a crear el fichero jsx y el css.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;NavbarBottom.jsx&lt;/code&gt; y &lt;code&gt;NavbarBottom.css&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para el desarrollo de los componentes, utilizaremos arrow functions.&lt;/p&gt;

&lt;p&gt;Asi que comenzamos el inicio del componente con el siguiente código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;NavbarBottom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;footer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/footer&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;NavbarBottom&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El próximo paso será insertar las imagenes, que posteriormente serán botones, pero por ahora, insertaremos las cinco imagenes dentro del footer e importaremos los svg que guardamos antes en la carpeta &lt;code&gt;assets&lt;/code&gt;. Además, pondre una constante llamada &lt;code&gt;URL_IMAGE_PROFILE_ICON&lt;/code&gt; en la que guardaré la url de la imagen de perfil.&lt;/p&gt;

&lt;p&gt;Ya que estamos, importaremos &lt;code&gt;NavbarBottom.css&lt;/code&gt;, que hemos creado antes, para estilar luego el navbar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./NavbarBottom.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;home&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../assets/home.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;search&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../assets/search.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;reels&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../assets/reels.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;messages&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../assets/messages.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;URL_IMAGE_PROFILE_ICON&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://img.freepik.com/free-photo/portrait-happy-young-woman-looking-camera_23-2147892777.jpg?w=2000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;NavbarBottom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;footer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;home&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;reels&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;URL_IMAGE_PROFILE_ICON&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;profile_icon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/footer&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;NavbarBottom&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este momento, tenemos el componente listo, solo quedaría darle los estilos.&lt;/p&gt;

&lt;p&gt;Para ello, comenzamos con el footer, vamos a comenzar con la posición. En instagram, este menú esta en la parte de abajo de la app, y su comportamiento es flotante, siempre está aunque se haga scroll.&lt;/p&gt;

&lt;p&gt;Asi que, vamos a darle el siguiente estilo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;footer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sticky&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;z-index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lo siguiente a incorporar a nuestro footer, es &lt;code&gt;flex&lt;/code&gt;, para que los iconos se alineen, y justificaremos el contenido para que ocupe todo el contenedor, respetando los margenes, esto lo realizaremos con &lt;code&gt;space-around&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Añadiremos también un padding, para dejar el contenido espaciado, y pondremos en gris el border de arriba, para simular exactamente la estetica de instagram.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;footer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-around&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sticky&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;z-index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.3px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="nb"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;213&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;213&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;213&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por último, estilaremos la imagen de perfil, para darle un tamaño de 24px y que sea rendondeada.&lt;/p&gt;

&lt;p&gt;Para ello, daremos un id a la imagen, en este caso, #profile_icon.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;footer&lt;/span&gt; &lt;span class="nf"&gt;#profile_icon&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto, tenemos nuestro componente listo!&lt;/p&gt;

&lt;p&gt;Ahora, seguimos con el componente &lt;code&gt;&amp;lt;NavbarTop&amp;gt;&lt;/code&gt;, que tiene un aspecto muy parecido al otro componente.&lt;/p&gt;

&lt;p&gt;Para comenzar, dentro de la carpeta &lt;code&gt;components&lt;/code&gt;, vamos a crear una nueva carpeta con el nombre &lt;code&gt;NavbarTop&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Una vez creada, crearemos los ficheros &lt;code&gt;NavbarTop.jsx&lt;/code&gt; y &lt;code&gt;NavbarTop.css&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Este componente es bastante sencillo, contiene el logo de Instagram a la izquierda, y luego a la derecha, el botón de añadir historia, el botón para ver las interacciones que han tenido contigo y por último, el botón para ver los mensajes directos.&lt;/p&gt;

&lt;p&gt;Comenzamos abriendo el archivo &lt;code&gt;NavbarTop.jsx&lt;/code&gt; y creamos la función junto con el import del archivo &lt;code&gt;NavbarTop.css&lt;/code&gt;, y exportamos la función.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./NavbarTop.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;NavbarTop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;NavbarTop&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lo siguiente será importar los iconos que vamos a utilizar, y que hemos mencionado más arriba.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./NavbarTop.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;logo&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../assets/logo.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;heart&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../assets/heart.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;messages&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../assets/messages.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../assets/add.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;NavbarTop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;NavbarTop&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora que tenemos todos lo necesario, vamos a plantear como realizar el componente.&lt;/p&gt;

&lt;p&gt;Crearemos un nav con el logo, y después, crearemos un div con un id &lt;code&gt;right_buttoms&lt;/code&gt; en el que insertaremos los botones de la derecha.&lt;/p&gt;

&lt;p&gt;¿Por que creamos un div para los botones de la derecha?&lt;br&gt;
Por que de esta manera, podemos poner el contenedor padre con flex, justificar el contenido con &lt;code&gt;justify-content: space-between&lt;/code&gt;, y queda el logo a la izquierda del todo, y el div con los botones a la derecha del todo.&lt;/p&gt;

&lt;p&gt;Ya el siguiente paso sería poner un &lt;code&gt;display: flex&lt;/code&gt; al div &lt;code&gt;right_buttons&lt;/code&gt; y tendríamos la estructura creada.&lt;/p&gt;

&lt;p&gt;El nav le daremos un &lt;code&gt;position: sticky&lt;/code&gt; para que se quede fijo arriba, tal y como tiene el comportamiento en Instagram y daremos un padding por arriba y por abajo de 10px con &lt;code&gt;padding: 10px 0 10px 0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Con estas instrucciones, el componente quedaría así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./NavbarTop.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;logo&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../assets/logo.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;heart&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../assets/heart.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;messages&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../assets/messages.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../../assets/add.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;NavbarTop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;nav&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;logo&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;navbar--logo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;right_buttons&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;heart&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/nav&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;NavbarTop&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se ha añadido un id al tag img del logo, para poder añadir un &lt;code&gt;margin-left: 10px&lt;/code&gt;, y que quede exactamente como en instagram.&lt;/p&gt;

&lt;p&gt;Ahora, veamos como quedó el css con las instrucciones de arriba.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-between&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sticky&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="nf"&gt;#right_buttons&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="nf"&gt;#right_buttons&lt;/span&gt; &lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;#navbar--logo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;margin-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hemos añadido a los distintos botones de la derecha, un padding para que no estuvieran juntos.&lt;/p&gt;

&lt;p&gt;De este modo, hemos creado los dos navs principales de nuestro clon de instagram.&lt;/p&gt;

&lt;p&gt;Espero que os haya gustado la segunda entrada del post, y para el próximo post, crearemos las rutas de la aplicación con &lt;code&gt;react-router-dom&lt;/code&gt;, para ir colocando los componentes en las distintas páginas.&lt;/p&gt;

&lt;p&gt;El enlace al repositorio os lo dejo por aquí, podeis aportar cualquier cambio mediante pull request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/robertomsen/clone-instagram-react" rel="noopener noreferrer"&gt;Repositorio clone-instagram-react&lt;/a&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>cryptocurrency</category>
      <category>blockchain</category>
      <category>web3</category>
    </item>
    <item>
      <title>Desarrollando un clon de instagram en React I - Configurando el entorno</title>
      <dc:creator>Roberto Monge Sencades</dc:creator>
      <pubDate>Tue, 31 Jan 2023 17:51:51 +0000</pubDate>
      <link>https://dev.to/robertomsen/desarrollando-un-clon-de-instagram-en-react-parte-1-5fml</link>
      <guid>https://dev.to/robertomsen/desarrollando-un-clon-de-instagram-en-react-parte-1-5fml</guid>
      <description>&lt;p&gt;Hace unos meses, tomé como objetivo practicar la maquetación simple y sencilla mediente CSS puro y HTML5, sin librerias de CSS y preprocesadores como SASS o LESS.&lt;/p&gt;

&lt;p&gt;Se me ocurrió la idea de realizar un clón de instagram, asi que me he propuesto realizarlo en React.&lt;/p&gt;

&lt;p&gt;En estos post, os iré contando mi pequeña aventura de desarrollar una aplicación como Instagram.&lt;/p&gt;

&lt;p&gt;Comenzaremos creando el front, pero quien sabe si en algún momento, me animo a realizar una API en Python o Node.JS para alimentar la aplicación.&lt;/p&gt;

&lt;p&gt;Por el momento, vamos a crear la aplicación básica con datos ficticios y ya habrá tiempo.&lt;/p&gt;

&lt;p&gt;Para este proposito, voy a utilizar ViteJS para realizar el proyecto.&lt;/p&gt;

&lt;p&gt;Para quien no sepa que es ViteJS, dejo un enlace a su web:&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://vite.dev/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvite.dev%2Fog-image.jpg" height="420" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://vite.dev/" rel="noopener noreferrer" class="c-link"&gt;
          Vite | Next Generation Frontend Tooling
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Next Generation Frontend Tooling
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvite.dev%2Flogo.svg" width="410" height="404"&gt;
        vite.dev
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;ViteJS es una herramienta de compilación que tiene como objetivo proporcionar una experiencia de desarrollo más rápida y ágil para proyectos web modernos.&lt;/p&gt;

&lt;p&gt;Pasandole un template, que ya tiene definida la propia herramienta, te genera el proyecto y un servidor para poder ver los cambios en local.&lt;/p&gt;

&lt;p&gt;Es mucho mas rápido que &lt;code&gt;create-react-app&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Comenzamos creando el proyecto, para ello, vamos a lanzar el comando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm create vite@latest clone-instagram-react -- --template react&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Con esto, crearemos el proyecto, y lo llamaremos, clone-instagram-react.&lt;/p&gt;

&lt;p&gt;Ya tenemos nuestro proyecto listo para comenzar a desarrollar.&lt;/p&gt;

&lt;p&gt;Por el momento voy a evitar el login y el registro, y vamos directamente a la vista de home, donde se encuentra el listado de stories y las publicaciones.&lt;/p&gt;

&lt;p&gt;Desarrollaremos los componentes de página que arriba hemos descrito.&lt;/p&gt;

&lt;p&gt;Y como componentes generales, crearemos el nav y el menú que está en el footer.&lt;/p&gt;

&lt;p&gt;En el próximo post, comenzaremos con el desarrollo del componente &lt;code&gt;NavbarBottom&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;El enlace al repositorio os lo dejo por aquí, podeis aportar cualquier cambio mediante pull request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/robertomsen/clone-instagram-react" rel="noopener noreferrer"&gt;Repositorio clone-instagram-react&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cryptocurrency</category>
      <category>crypto</category>
      <category>offers</category>
      <category>web3</category>
    </item>
  </channel>
</rss>
