<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ carlos - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ carlos - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 09 May 2026 13:42:04 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/car2t/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Tutorial de React Router versión 6 – Cómo navegar a otros componentes y configurar un enrutador ]]>
                </title>
                <description>
                    <![CDATA[ En este tutorial hablaremos sobre qué es React Router y cómo utilizarlo. Luego discutiremos sus funcionalidades y cómo usarlas en tu aplicación de React para navegar y renderizar varios componentes.  Requisitos  * Una aplicación de React  * Un buen entendimiento de qué son los componentes en React. ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/tutorial-de-react-router-version-6-como-navegar-a-otros-componentes-y-configurar-un-enrutador/</link>
                <guid isPermaLink="false">63b993a0a0461907f417494e</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ carlos ]]>
                </dc:creator>
                <pubDate>Fri, 20 Jan 2023 03:49:38 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/01/react-router-cover.svg.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-use-react-router-version-6/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">React Router Version 6 Tutorial – How to Set Up Router and Route to Other Components</a>
      </p><p>En este tutorial hablaremos sobre qué es <em>React Router</em> y cómo utilizarlo. Luego discutiremos sus funcionalidades y cómo usarlas en tu aplicación de <em>React </em>para navegar y renderizar varios componentes. </p><h3 id="requisitos"><strong>Requisitos</strong></h3><ul><li>Una aplicación de <em>React</em></li><li>Un buen entendimiento de qué son los componentes en <em>React</em>. </li><li>Tener instalado<em> Node.js</em>.</li></ul><h2 id="react-como-aplicaci-n-de-p-gina-nica-spa-"><em>React </em>como aplicación de página única<strong> </strong>(<em>SPA</em>)</h2><p>Necesitas entender cómo son renderizadas las páginas en una aplicación de <em>React </em>antes de zambullirte en el enrutamiento. Esta sección está dirigida a principiantes –puedes saltártela si ya entiendes qué es una <em>SPA </em>(siglas en inglés para <em>Single Page Application) </em>y cómo se relaciona con <em>React</em>. </p><p>Cuando pulsas un enlace en el navegador, en aplicaciones con más de una página, es enviada una petición al servidor antes de que la página HTML se muestre. </p><p>En <em>React</em>, el contenido de la página es creado a partir de nuestros componentes. Así que lo que hace <em>React Router</em> es interceptar la petición que se envía al servidor y luego inyectar el contenido dinámicamente desde los componentes que hemos creado. </p><p>Esta es la idea general detrás de las <em>SPA</em>, que permiten que el contenido se muestre más rápido sin que la página sea actualizada. </p><p>Cuando creas un nuevo proyecto, siempre verás un archivo <code>indice.html</code> en la carpeta <em>public </em>('pública'). Todo el código que escribas en tu componente <code>Aplicacion</code>, que actúa como componente raíz, se renderiza en este archivo HTML. Esto significa que sólo hay un archivo HTML en el cual será renderizado tu código. &nbsp;</p><p>¿Qué ocurre cuando prefieres renderizar en una página distinta otro componente? ¿Creas un nuevo archivo HTML? La respuesta es no. <em>React Router</em> – como su nombre en inglés indica ('enrutador de <em>React</em>')– te ayudará a dirigirte a o navegar a un componente concreto, y te ayudará a renderizar tu nuevo componente en el archivo <code>indice.html</code>. &nbsp;</p><p>Así que, en una aplicación de página única, cuando se navega a un nuevo componente utilizando <em>React Router</em>, el archivo <code>indice.html</code> será reescrito en función de la lógica del componente. </p><h2 id="c-mo-instalar-react-router"><strong>Cómo instalar React Router</strong></h2><p>Todo lo que tienes que hacer para instalar <em>React Router </em>6<em> </em>es ejecutar <code>npm install react-router-dom@6</code> en la terminal de tu proyecto y esperar a que se complete la instalación. </p><p>Si estás usando <em>yarn</em>, emplea este comando: <code>yarn add react-router-dom@6</code>.</p><h2 id="c-mo-configurar-react-router"><strong>Cómo configurar React Router</strong></h2><p>Lo primero que hay que hacer, una vez completada la instalación, es conseguir que <em>React Router</em> esté disponible en cualquier parte de tu aplicación. </p><p>Para hacer esto, abre el archivo <code>indice.js</code> de la carpeta <em>src </em>(de <em>source</em>, 'fuente' en inglés) e importa (<em>import</em>) <code>BrowserRouter</code> desde <code>react-router-dom</code>, y luego, rodea el componente raíz (el componente <code>Aplicacion</code>) con él. </p><p>Este es el aspecto inicial del archivo <code>indice.js</code>:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">import React from 'react';
import ReactDOM from 'react-dom';
import './indice.css';
import Aplicacion from './Aplicacion';

ReactDOM.render(
  &lt;React.StrictMode&gt;
    &lt;Aplicacion /&gt;
  &lt;/React.StrictMode&gt;,
  document.getElementById('raiz')
);

</code></pre><figcaption>Archivo indice.js</figcaption></figure><p>Después de hacer los cambios con <em>React Router</em>, deberías tener lo siguiente: </p><pre><code class="language-js">import React from 'react';
import ReactDOM from 'react-dom';
import './indice.css';
import Aplicacion from './Aplicacion';
import { BrowserRouter } from "react-router-dom";

ReactDOM.render(
  &lt;BrowserRouter&gt;
    &lt;Aplicacion /&gt;
  &lt;/BrowserRouter&gt;,
  document.getElementById("raiz")
);</code></pre><p>Todo lo que hemos hecho es reemplazar <code>React.StrictMode</code> por <code>BrowserRouter</code>; que hemos importado primero de <code>react-router-dom</code>. &nbsp;Ahora las características del enrutador son accesibles desde cualquier parte de tu aplicación. </p><h2 id="c-mo-redirigir-hacia-otros-componentes"><strong>Cómo redirigir hacia otros componentes </strong></h2><p>Por fin hemos terminado de configurar las cosas, así que ahora veremos el enrutamiento y la renderización de los diferentes componentes. </p><h3 id="paso-1-crea-varios-componentes"><strong>Paso 1 - Crea varios componentes </strong></h3><p>Crearemos de la manera siguiente los componentes <code>Inicio</code>, <code>SobreNosotros</code> y <code>Contacto</code>: </p><figure class="kg-card kg-code-card"><pre><code class="language-js">function Inicio() {
  return (
    &lt;div&gt;
      &lt;h1&gt;Esta es la página de inicio&lt;/h1&gt;
    &lt;/div&gt;
  );
}

export default Inicio;
</code></pre><figcaption>Componente Inicio</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-js">import React from 'react'

function SobreNosotros() {
    return (
        &lt;div&gt;
            &lt;h1&gt;Esta es la página sobre nosotros&lt;/h1&gt;
        &lt;/div&gt;
    )
}

export default SobreNosotros</code></pre><figcaption>Componente SobreNosotros</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-js">import React from 'react'

function Contacto() {
    return (
        &lt;div&gt;
            &lt;h1&gt;Esta es la página de contacto&lt;/h1&gt;
        &lt;/div&gt;
    )
}

export default Contacto</code></pre><figcaption>Componente Contacto</figcaption></figure><h3 id="paso-2-define-las-rutas"><strong>Paso 2 - Define las rutas </strong></h3><p>Dado que el componente <code>Aplicacion</code> actúa como el componente raíz, en dónde se renderiza al principio nuestro código <em>React</em>, vamos a crear todas nuestras rutas en él. </p><p>No te preocupes si esto no tiene mucho sentido –lo entenderás mejor después de ver el ejemplo de abajo. </p><figure class="kg-card kg-code-card"><pre><code class="language-js">import { Routes, Route } from "react-router-dom"
import Inicio from "./Inicio"
import SobreNosotros from "./SobreNosotros"
import Contacto from "./Contacto"

function Aplicacion() {
  return (
    &lt;div className="Aplicacion"&gt;
      &lt;Routes&gt;
        &lt;Route path="/" element={ &lt;Inicio /&gt; } /&gt;
        &lt;Route path="sobre-nosotros" element={ &lt;SobreNosotros /&gt; } /&gt;
        &lt;Route path="contacto" element={ &lt;Contacto /&gt; } /&gt;
      &lt;/Routes&gt;
    &lt;/div&gt;
  )
}

export default Aplicacion
</code></pre><figcaption>Componente Aplicacion</figcaption></figure><p>Primero importaremos las funcionalidades que emplearemos: <code>Routes</code> y <code>Route</code>. A continuación, importaremos todos los componentes a los que necesitamos proporcionar una ruta. Ahora desglosaremos el proceso. </p><p><code>Routes</code> actúa como contenedor padre de todas las rutas individuales que se crearán en nuestra aplicación. </p><p><code>Route</code> se utiliza para crear una única ruta. Recibe dos atributos: </p><ul><li><code>path</code>, que especifica la ruta <em>URL </em>del componente deseado. Puedes llamar a esta ruta de la manera que quieras. Arriba, habrás notado que el primer nombre de ruta es una barra diagonal (/). Cualquier componente cuya nombre de ruta sea una barra diagonal se mostrará primero, siempre que la aplicación se cargue por vez primera. Esto implica que el componente <code>Inicio</code> será el primero en mostrarse. &nbsp;</li><li><code>element</code>, que especifica el componente que debe renderizar el enrutador.</li></ul><p>Todo lo que hemos hecho hasta ahora es definir nuestras rutas, y sus direcciones, y ligarlas a sus respectivos componentes. </p><p>Si vienes de la versión 5, te habrás dado cuenta de que no estamos usando <code>exact</code> and <code>switch</code>, lo cual es genial. </p><h3 id="paso-3-usa-link-para-navegar-a-las-rutas"><strong>Paso 3 - Usa <code>Link</code> para navegar a las rutas</strong></h3><p>Si has estado codificando hasta este punto sin ningún error, tu navegador debería estar mostrando el componente <code>Inicio</code>. </p><p>Ahora emplearemos una funcionalidad distinta de <em>React Router</em> para navegar a otras páginas con base en esas rutas y nombres de ruta que hemos creado en el componente <code>Aplicacion</code>. Esto es: &nbsp;</p><figure class="kg-card kg-code-card"><pre><code class="language-js">import { Link } from "react-router-dom";

function Inicio() {
  return (
    &lt;div&gt;
      &lt;h1&gt;Esta es la página de inicio&lt;/h1&gt;
      &lt;Link to="sobre-nosotros"&gt;Haz clic para ver la página sobre nosotros&lt;/Link&gt;
      &lt;Link to="contacto"&gt;Haz clic para ver la página de contacto&lt;/Link&gt;
    &lt;/div&gt;
  );
}

export default Inicio;
</code></pre><figcaption>Componente Inicio</figcaption></figure><p>El componente <code>Link</code> es similar al elemento <em>anchor </em>(<code>&lt;a&gt;</code><a>) en HTML. Su atributo <code>to</code> especifica a qué ruta nos lleva el enlace.</a> </p><p>Recuerda que hemos creado los nombres de ruta listados en el componente <code>Aplicacion</code> para que cuando hagas clic en el enlace, revise tus rutas y renderice el componente que corresponda a dicho nombre. </p><p>Recuerda que siempre debes importar <code>Link</code> desde <code>react-router-dom</code> antes de poder usarlo. </p><h2 id="conclusi-n"><strong>Conclusión</strong></h2><p>Llegados a este punto, ya hemos visto cómo instalar, configurar y usar las funcionalidades básicas de <em>React Router</em> para poder navegar a diferentes páginas de tu aplicación. Esto cubre, más o menos, lo básico para empezar, pero hay muchas más funcionalidades geniales. </p><p>Por ejemplo, podrías emplear <code>useNavigate</code> para empujar a los usuarios a través de varias páginas, o podrías emplear <code>useLocation</code> para obtener la URL actual. De acuerdo, no empezaremos otro tutorial al final del artículo.</p><p>Puedes consultar más funcionalidades en la <a href="https://reactrouter.com/en/main">documentación de <em>React Router</em></a>. </p><p>Puedes encontrarme en <em>Twitter <a href="https://twitter.com/Ihechikara2">@ihechikara2</a></em>. </p><p>¡Disfruta codificando!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Aprende sobre React Router en 5 minutos. Tutorial para principiantes ]]>
                </title>
                <description>
                    <![CDATA[ A veces solo tienes 5 minutos libres... en lugar de perderlos en las redes sociales, ¡hagamos una introducción de 5 minutos sobre el enrutamiento en React!  En este tutorial aprenderemos los conceptos básicos del enrutamiento en React  construyendo la navegación para un sitio web: la tienda de tejidos ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/aprende-sobre-react-router-en-5-minutos-tutorial-para-principiantes/</link>
                <guid isPermaLink="false">63a978f25f6069094f5f9e0e</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ carlos ]]>
                </dc:creator>
                <pubDate>Fri, 06 Jan 2023 18:57:45 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/12/5f9c9f69740569d1a4ca4284.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/react-router-in-5-minutes/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Learn React Router in 5 Minutes - A Beginner's Tutorial</a>
      </p><p>A veces solo tienes 5 minutos libres... en lugar de perderlos en las redes sociales, ¡hagamos una introducción de 5 minutos sobre el enrutamiento en <em>React</em>! <br>En este tutorial aprenderemos los conceptos básicos del enrutamiento en <em>React </em>construyendo la navegación para un sitio web: la tienda de tejidos de punto de <em>Scrimba</em>. No es real, pero quizás algún día... ;) </p><h3 id="por-cierto-qu-es-react-router">Por cierto, ¿qué es React-Router?</h3><p>Muchos sitios web modernos se componen, en realidad, de una sola página; simplemente parecen varias porque contienen componentes que se renderizan como páginas separadas. Normalmente, se denominan aplicaciones de una sola página (<em>SPA, </em>siglas en inglés para <em>Single-Page Application</em>). En esencia, lo que <em>React Router</em> hace es generar determinados componentes en función de la ruta empleada en la URL (por ejemplo, <code>/</code>, para la página de inicio; <code>/sobre-nosotros</code>, para la página de información o acerca de, etc.). </p><p>Por ejemplo, podemos utilizar la librería <em>React Router </em>para enlazar <em>www.haz-punto-con-scrimba.com/ </em>(página principal) con <em>www.haz-punto-con-scrimba.com/sobre-nosotros, </em>o <em>www.haz-punto-con-scrimba.com/tienda</em>. </p><h3 id="suena-bien-pero-c-mo-se-utiliza">Suena bien... pero ¿cómo se utiliza? </h3><p>Para emplear <em>React</em> <em>Router</em>, primero tienes que instalarla usando <em>NPM</em>: </p><pre><code class="language-bash">npm install react-router-dom
</code></pre><p>O bien, puedes usar <a href="https://scrimba.com/c/cNq8MzCr">esta zona de juegos en <em>Scrimba</em></a> que ya tiene escrito el código completo en inglés.</p><p>Tendrás que importar <em>BrowserRouter</em>, <em>Route </em>y <em>Switch </em>del paquete <code>react-router-dom</code>: </p><pre><code class="language-js">import React, { Component } from 'react';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
</code></pre><p>En mi ejemplo, enlazo la página de destino con otras dos "páginas" llamadas <code>Tienda</code> y <code>SobreNosotros</code>, que en realidad son tan solo componentes. </p><p>En primer lugar, tendrás que configurar tu aplicación para que funcione con <em>React Router</em>. Todo lo que vaya a ser renderizado tendrá que ir dentro del elemento <code>&lt;BrowserRouter&gt;</code>, así que primero envuelve tu aplicación con él. <em>BrowserRouter </em>es el componente que realiza toda la lógica para mostrar los componentes que le proporciones. </p><pre><code class="language-js">// indice.js

ReactDOM.render(
    &lt;BrowserRouter&gt;
        &lt;Aplicacion /&gt;
    &lt;/BrowserRouter&gt;, 
    document.getElementById('raíz')
)
</code></pre><p>A continuación, añade el elemento <code>Switch</code><em> </em>(con las etiquetas de apertura y de cierre) dentro de tu componente <code>Aplicacion</code>. Esto te asegura que solo se mostrará un componente a la vez. Si no lo hacemos así, podríamos usar por defecto el componente <code>Error</code>, que escribiremos más tarde.</p><pre><code class="language-js">function Aplicacion() {
    
    return (
        &lt;main&gt;
            &lt;Switch&gt;
                
            &lt;/Switch&gt;
        &lt;/main&gt;
    )
}
</code></pre><p>Ahora es el momento de añadir tus etiquetas <code>&lt;Route&gt;</code>. Estas son los enlaces entre los componentes y deben ser colocadas dentro de las etiquetas <code>&lt;Switch&gt;</code>. </p><p>Para decirle a las etiquetas <code>&lt;Route&gt;</code> qué componente debe cargarse, basta con añadir un atributo <code>path</code> ('ruta') y el nombre de dicho componente con el atributo <code>component</code>. </p><pre><code class="language-js">&lt;Route path='/' component={Inicio} /&gt;
</code></pre><p>Muchas URL de páginas de inicio son tan solo el nombre del sitio seguido de "<strong>/</strong>", por ejemplo, <em>www.haz-punto-con-scrimba.com/</em>. En este caso, añadiremos <code>exact</code> a la etiqueta <em>Route</em>. El motivo es que las otras <em>URL</em> también contienen "<strong>/</strong>", por lo que si no le decimos a la aplicación que busque tan solo por <strong><code>/</code></strong>, cargará la primera ruta que coincida con el valor del atributo <code>path</code>, y obtendremos así un error bastante difícil de tratar. </p><pre><code class="language-js">function Aplicacion() {
    return (
        &lt;main&gt;
            &lt;Switch&gt;
                &lt;Route path="/" component={Inicio} exact /&gt;
                &lt;Route path="/sobre-nosotros" component={SobreNosotros} /&gt;
                &lt;Route path="/tienda" component={Tienda} /&gt;
            &lt;/Switch&gt;
        &lt;/main&gt;
    )
}
</code></pre><p>Ahora importa (<code>import</code>) los componentes dentro de la aplicación. Es posible que quieras tener tus componentes en una carpeta separada, "componentes", y así mantener el código limpio y legible. </p><pre><code class="language-js">import Inicio from './componentes/Inicio';
import SobreNosotros from './componentes/SobreNosotros';
import Tienda from './componentes/Tienda';
</code></pre><p>Sobre ese mensaje de error que mencioné antes; el que se carga si un usuario escribe una <em>URL</em> incorrecta. Es como una etiqueta normal, pero sin ruta. El componente <em>Error </em>contiene <code>&lt;h1&gt;¡Uy! Página no encontrada&lt;/h1&gt;</code>. No te olvides de importarlo en la aplicación.</p><pre><code class="language-js">function Aplicacion() {
    return (
        &lt;main&gt;
            &lt;Switch&gt;
                &lt;Route path="/" component={Inicio} exact /&gt;
                &lt;Route path="/sobre-nosotros" component={SobreNosotros} /&gt;
                &lt;Route path="/tienda" component={Tienda} /&gt;
                &lt;Route component={Error} /&gt;
            &lt;/Switch&gt;
        &lt;/main&gt;
    )
}
</code></pre><p>De momento nuestro sitio web es solo navegable tecleando las URL. Utilizaremos el elemento <code>Link</code> de <em>React Router p</em>ara añadir al sitio web los enlaces, sobre los que podremos clicar, y configuraremos un nuevo componente llamado <code>BarraNavegacion</code>. Una vez más, no te olvides de importar el nuevo componente a la aplicación. </p><p>Ahora añade un enlace, <code>Link</code>, para cada componente de la aplicación y emplea <code>to="<em>URL</em>"</code> para vincularlos. </p><pre><code class="language-js">function BarraNavegacion() {
  return (
    &lt;div&gt;
      &lt;Link to="/"&gt;Inicio &lt;/Link&gt;
      &lt;Link to="/sobre-nosotros"&gt;Sobre nosotros &lt;/Link&gt;
      &lt;Link to="/tienda"&gt;Compra ahora &lt;/Link&gt;
    &lt;/div&gt;
  );
};
</code></pre><p>Ahora tu sitio web tiene enlaces en los que se puede hacer clic, navegar por tu aplicación de una sola página (<em>SPA</em>)</p><h3 id="conclusi-n"><strong><strong>Conclusi</strong>ó<strong>n</strong></strong></h3><p>Así que, ahí lo tenemos. Si quieres navegar fácilmente por una aplicación de <em>React</em>, olvídate de las etiquetas de tipo <em>anchor </em>( <code>&lt;a&gt;<em>enlace</em>&lt;/a&gt;</code> ) y añade a tu aplicación la librería <em>React Router</em>. Es limpio, es organizado y hace que añadir o eliminar páginas sea mucho más sencillo. &nbsp;</p><p>Disfruta programando ;)</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo usar iconos SVG en  React con React Icons y Font Awesome ]]>
                </title>
                <description>
                    <![CDATA[ Emplear iconos es una manera de comunicar visualmente conceptos y significados sin necesidad de palabras. Esto podría usarse para una clasificación, una acción o incluso una advertencia. ¿Cómo podemos añadir iconos a nuestras aplicaciones de React para mejorar nuestro mensaje visual usando SVG?  * ¿Qué es SVG?  * ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-usar-iconos-svg-en-react-y-font-awesome/</link>
                <guid isPermaLink="false">6390b134980b9a08b63a6703</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ carlos ]]>
                </dc:creator>
                <pubDate>Wed, 21 Dec 2022 23:16:13 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/12/react-icons.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-use-svg-icons-in-react-with-react-icons-and-font-awesome/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Use SVG Icons in React with React Icons and Font Awesome</a>
      </p><p>Emplear iconos es una manera de comunicar visualmente conceptos y significados sin necesidad de palabras. Esto podría usarse para una clasificación, una acción o incluso una advertencia.</p><p>¿Cómo podemos añadir iconos a nuestras aplicaciones de <em>React </em>para mejorar nuestro mensaje visual usando <em>SVG</em>?</p><ul><li><a href="#que-es-svg">¿Qué es <em>SVG</em>?</a></li><li><a href="#genial">¿Qué hace que <em>SVG </em>sea genial para la web?</a></li><li><a href="#crear">Parte 0: Creando una aplicación <em>React</em></a></li><li><a href="#parte-1">Parte 1: Añadiendo iconos <em>SVG </em>con <em>react-icons</em></a></li><li><a href="#parte-2">Parte 2: Añadiendo manualmente archivos SVG a un componente de <em>React</em></a></li></ul><!--kg-card-begin: html--><h1 id="que-es-svg">¿Qué es SVG?</h1>
<!--kg-card-end: html--><p><em>SVG </em>son las siglas en inglés de gráficos vectoriales escalables (<em>Scalable Vector Graphics</em>). Es un formato de archivo &nbsp;–basado en un lenguaje de marcado similar al <em>XML– </em>que permite a programadores y diseñadores crear imágenes vectoriales usando definiciones de rutas.</p><!--kg-card-begin: html--><h1 id="genial">¿Qué hace que SVG sea genial para la web?</h1><!--kg-card-end: html--><p><em>SVG </em>nació para la web. Es un estándar abierto creado por el <em>W3C</em> para proveer de una mejor manera de añadir imágenes a la web. Si abres un archivo <em>SVG </em>en tu ordenador, puede que te sorprenda ver que... ¡Todo es código!</p><p>Esto influye en el reducido tamaño del archivo. Normalmente, cuando se utiliza un <em>SVG</em>, te puedes aprovechar de su menor tamaño en comparación con los archivos de imagen, más grandes, que podrían ser necesarios para ofrecer la misma alta resolución. </p><p>Además, ya que estamos definiendo los <em>SVG </em>como rutas, pueden agrandarse o reducirse tanto como queramos. Esto los hace aún más flexibles para su uso en la web, especialmente cuando se trata de crear experiencias adaptativas. </p><!--kg-card-begin: html--><h1>¿Qué vamos a crear?</h1><!--kg-card-end: html--><p>Primero pasaremos a utilizar un paquete llamado <a href="https://react-icons.github.io/react-icons/"><em>react-icons</em></a> que nos permitirá importar, de una manera fácil y directa, los iconos de conjuntos populares de iconos como <a href="https://fontawesome.com/"><em>Font Awesome</em></a>. </p><p>También echaremos un vistazo a cómo podemos añadir manualmente los archivos <em>SVG </em>a nuestra aplicación; copiando directamente el código de un archivo SVG dentro de un nuevo componente.</p><!--kg-card-begin: html--><h2 id="crear">Parte 0: Creando una aplicación de React</h2><!--kg-card-end: html--><p>Para este tutorial, puedes utilizar cualquier <em>framework </em>de <em>React </em>que desees, ya sea <em><a href="https://create-react-app.dev/">Create React App</a></em> o <a href="https://nextjs.org/"><em>Next.js</em></a>. Incluso puedes usar un proyecto existente. </p><p>Como no necesitamos nada especial para añadir nuestros iconos, voy a usar <em>create-react-app</em>. </p><p>Para ir empezando con <em><a href="https://create-react-app.dev/">Create React App</a></em>, puedes crear un nuevo proyecto utilizando uno de los comandos siguientes en tu terminal:</p><pre><code>yarn create react-app [nombre-de-tu-proyecto]

# o bien

npx create-react-app [nombre-de-tu-proyecto]
</code></pre><p><em>Nota<em>: </em>reemplaza <em><code>[</code></em><code>nombre-de-tu-proyecto</code><em><code>]</code> </em>por el nombre que quieres emplear para tú proyecto<em>. </em>Yo utilizaré<em> <code>my-svg-icons</code>.</em></em></p><p>Cuando tengas creada tu aplicación nueva, o tengas ya una aplicación, ¡estaremos listos para continuar!</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/new-create-react-app.jpg" class="kg-image" alt="new-create-react-app" width="600" height="400" loading="lazy"><figcaption>Nueva aplicación de React</figcaption></figure><!--kg-card-begin: html--><h2 id="parte-1">Parte 1: Añadiendo iconos SVG con react-icons</h2><!--kg-card-end: html--><h3 id="a-adiendo-react-icons-a-tu-proyecto"><strong>Añadiendo </strong><em><strong>react-icons</strong></em><strong> a tu proyecto</strong></h3><p>Para poder empezar con <em><a href="https://react-icons.github.io/react-icons/">react-icons</a></em> lo instalaremos primero en nuestro proyecto. </p><p>Ejecuta el comando siguiente dentro de tu proyecto: </p><pre><code>yarn add react-icons
# o bien
npm install react-icons --save
</code></pre><p>Una vez completado el proceso, deberíamos poder utilizarlo en nuestro proyecto. </p><h3 id="seleccionando-los-iconos-del-proyecto"><strong>Seleccionando los iconos del proyecto</strong></h3><p>Una de las cosas interesantes de <em><a href="https://react-icons.github.io/react-icons/">react-icons</a></em> es una biblioteca extensa que pone a disposición dentro de un paquete individual. </p><p>No solo tenemos inmediatamente accesible <em><a href="https://fontawesome.com/">Font Awesome</a></em>, sino también los repositorios de <em>GitHub,</em> <a href="https://primer.style/octicons/"><em>Octicons</em></a>, <a href="https://heroicons.com/"><em>Heroicons</em></a>, <a href="https://google.github.io/material-design-icons/"><em>Material Design Icons</em></a><em>,</em> y un montón más.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/react-icons-heroicons.jpg" class="kg-image" alt="react-icons-heroicons" width="600" height="400" loading="lazy"><figcaption>La librería Heroicons en react-icons</figcaption></figure><p>A la hora de elegir los iconos prácticamente podrías usar el que tú quieras en cualquier momento. Dicho esto, te recomiendo que intentes ser coherente en la apariencia de tus iconos. </p><p>Si para tu sitio web utilizas principalmente <em>Font Awesome</em>, podría parecer un poco extraño e incoherente si empezases a añadir <em>Flat Color Icons</em> a la mezcla. En última instancia, lo que quieres es ofrecer una experiencia en la que la gente sea capaz de identificar fácilmente los patrones que has creado. &nbsp;</p><h3 id="utilizando-react-icons-en-tu-proyecto"><strong>Utilizando </strong><em><strong>react-icons</strong></em><strong> en tu proyecto</strong></h3><p>Una vez que hayas encontrado los iconos que quieres usar, ya podemos añadirlos a nuestro proyecto.</p><p>La página web de <em><a href="https://react-icons.github.io/react-icons/">react-icons</a></em> nos facilita la búsqueda del nombre del icono que queremos utilizar e importar a nuestro proyecto. </p><p>Por ejemplo, si quisiéramos utilizar el icono del cohete [<em>rocket </em>en inglés] de <em>Font Awesome</em> nos posicionaríamos en la barra lateral, nos desplazamos hasta <em>Font Awesome</em>,<em> </em>buscamos "cohete" en la página (con la ayuda de <em>CMD + F,</em> o <em>CTRL + F</em>) y, finalmente, clicamos sobre el icono; lo que copiará su nombre a tú portapapeles.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/font-awesome-rocket.jpg" class="kg-image" alt="font-awesome-rocket" width="600" height="400" loading="lazy"><figcaption>Icono de cohete en la librería Font Awesome</figcaption></figure><p>También podemos buscar "cohete" en el formulario de búsqueda de la parte superior izquierda de la página; lo que nos mostraría el resultado "cohete" en todos los conjuntos de iconos existentes. </p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/react-icons-rocket.jpg" class="kg-image" alt="react-icons-rocket" width="600" height="400" loading="lazy"><figcaption>Iconos de cohetes en la librería react-icons</figcaption></figure><p>Ahora ya podemos importar ese icono dentro de nuestro proyecto. Al igual que en las instrucciones de la parte superior de la página de <em>react-icons</em>, queremos importar ese icono específico <code>react-icons/fa</code> al que se refiere al módulo <em>Font Awesome</em> de <em>react-icons</em>. </p><p>En la parte superior del archivo en el que quieras importar el icono añade lo siguiente. Si usas <em>create-react-app </em>para un proyecto nuevo, puedes añadirlo al principio del archivo <code>src/App.js</code>.</p><pre><code class="language-js">import { FaRocket } from 'react-icons/fa';
</code></pre><p>Para probarlo, sustituyamos el logo de <em>React </em>por nuestro icono.</p><p>Elimina el elemento <code>&lt;img</code> y sustitúyelo por:</p><pre><code class="language-jsx">&lt;FaRocket /&gt;
</code></pre><p>Y si recargamos la página, ¡podremos ver nuestro cohete!</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/create-react-app-rocket-icon.jpg" class="kg-image" alt="create-react-app-rocket-icon" width="600" height="400" loading="lazy"><figcaption>Rocket icon in React app</figcaption></figure><p>Sin embargo, nuestro cohete no gira como el logo de <em>React</em>, así que vamos a arreglarlo.</p><p>Añade la clase <code>.App-logo</code> al componente <code>FaRocket</code>:</p><pre><code class="language-jsx">&lt;FaRocket className="App-logo" /&gt;
</code></pre><p>¡Y ahora el cohete debería estar girando!</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/create-react-app-rocket-spin.gif" class="kg-image" alt="create-react-app-rocket-spin" width="600" height="400" loading="lazy"><figcaption>Spinning rocket icon in React app</figcaption></figure><p>Pero también es un poco pequeño. Si miramos dentro de <code>src/App.css</code> estamos estableciendo la altura de <code>.App-logo</code> a <code>40vmin</code>. Si bien eso funciona, para que nuestro icono llene el espacio, le tenemos que proporcionar también un ancho. </p><p>Para añadir un ancho [<em>width</em>], agrega el código siguiente a la clase CSS <code>.App-logo</code>:</p><pre><code class="language-css">width: 40vmin;
</code></pre><p>Aunque ahora probablemente sea un poco demasiado grande, ¡ya tenemos nuestro icono y un tamaño más apropiado!</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/create-react-app-icon-rocket-spin-large.gif" class="kg-image" alt="create-react-app-icon-rocket-spin-large" width="600" height="400" loading="lazy"><figcaption>Increased size of spinning rocket icon in React app</figcaption></figure><p><a href="https://github.com/colbyfayock/my-svg-icons/commit/036112c3e2ffc5f42a53c68e8025fe70a87e3b13">Sigue el proceso en el <em>commit</em> del repositorio.</a></p><!--kg-card-begin: html--><h2 id="parte-2">Parte 2: Añadiendo manualmente archivos SVG a un componente de React</h2><!--kg-card-end: html--><p>A veces, no querrás añadir una nueva biblioteca solo para conseguir un icono. En ocasiones, se trata de un icono personalizado que no está disponible en una biblioteca pública. </p><p>Afortunadamente con <em>React</em>, podemos crear un nuevo componente <em>SVG </em>con bastante facilidad que nos permite añadir nuestros iconos <em>SVG </em>personalizados donde queramos. </p><p>Primero, busquemos un icono. </p><p>Aunque todos los iconos de <em>Heroicons</em> están disponibles dentro de <em>react-icons</em>, vamos a utilizarlo como ejemplo, ya que es fácil de encontrar y copiar algo de código <em>SVG</em>. </p><p>Ve a <em><a href="https://heroicons.com/">heroicons.com</a></em> y busca por un icono que te gustaría usar para este ejemplo. Yo utilizaré "globo terráqueo" [<em>globe</em>]. </p><p>Después de encontrar el icono que quieres, pasa el ratón por encima del mismo y verás las opciones para copiarlo como <em>SVG </em>o <em>JSX</em>. Pulsa copiar como <em>JSX</em>. </p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/heroicons-copy-svg.gif" class="kg-image" alt="heroicons-copy-svg" width="600" height="400" loading="lazy"><figcaption>Copy as JSX in Heroicons</figcaption></figure><p>Con ese icono ya copiado, crea un nuevo archivo bajo <code>src</code> llamado <code>Globe.js</code>.</p><p>Dentro de ese archivo, crearemos un nuevo componente llamado "Globo" y pegaremos nuestro código <em>SVG </em>dentro del mismo. </p><pre><code class="language-jsx">import React from 'react';

const Globo = () =&gt; {
  return (
    &lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"&gt;
      &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /&gt;
    &lt;/svg&gt;
  )
}

export default Globo;
</code></pre><p><em>Nota: al copiar SVG normal dentro de un componente de React, puede que no funcione "tal cual es". A veces, los archivos SVG incluyen clases CSS o atributos que no son válidos con JSX.</em> </p><p>Si te encuentras con errores, intenta arreglar los atributos y mira la consola del navegador para ver los errores y las advertencias que <em>React </em>arroja. Como copiamos el icono como <em>JSX</em>, conseguimos hacerlo funcionar de inmediato.</p><p>Ahora, vuelve a <code>src/App.js</code> e importa nuestro nuevo componente:</p><pre><code class="language-js">import Globo from './Globo';
</code></pre><p>A continuación, podemos sustituir el icono del cohete por nuestro nuevo componente: </p><pre><code class="language-jsx">&lt;Globo /&gt;
</code></pre><p>Y si abrimos nuestro navegador, ¡podremos ver nuestro globo terráqueo!</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/create-react-app-globe-large.jpg" class="kg-image" alt="create-react-app-globe-large" width="600" height="400" loading="lazy"><figcaption>Icono enorme de un globo terráqueo en la aplicación de <em>React</em></figcaption></figure><p>Aunque es un poco grande. </p><p>Queremos aplicar nuestra clase <code>.App-logo</code> a nuestro componente Globo, así que necesitamos actualizar dicho componente para que reciba una <em>prop ('propiedad') className</em>. </p><p>Vuelve a <code>src/Globo.js</code>, y añade la propiedad <code>className</code> como argumento:</p><pre><code>const Globo = ({ className }) =&gt; {
</code></pre><p>Luego, añade una nueva propiedad con esa <code>className</code> <em>prop ('propiedad') </em>al componente <code>&lt;svg</code>:</p><pre><code class="language-jsx">&lt;svg className={className}
</code></pre><p>Ahora, podemos actualizar nuestro componente Globo en <code>src/App.js</code> para incluir esa clase:</p><pre><code class="language-jsx">&lt;Globo className="App-logo" /&gt;
</code></pre><p>Y si recargamos la página, podremos ver que nuestro logotipo, con el tamaño correcto, está de vuelta y ¡vuelve a girar! </p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/create-react-app-globe-icon-spinning.gif" class="kg-image" alt="create-react-app-globe-icon-spinning" width="600" height="400" loading="lazy"><figcaption>Icono giratorio de un globo terráqueo de tamaño normal en una aplicación de <em>React</em></figcaption></figure><p><a href="https://github.com/colbyfayock/my-svg-icons/commit/87b00748fc9b38d80336ddb5f6f823388c2edead">Sigue el proceso en el <em>commit </em>del repositorio.</a> </p><h2 id="-por-qu-no-lo-incluimos-como-un-archivo-de-imagen"><strong>¿Por qué no lo incluimos como un archivo de imagen? </strong></h2><p>Aunque podemos incluir el icono como un archivo de imagen, tal y como hace <em>React </em>en el código predeterminado por <em>create-react-app</em>, se obtienen algunas ventajas al añadir nuestros archivos <em>SVG </em>en línea. </p><p>Por un lado, cuando añadimos el <em>SVG </em>en línea, podremos acceder a las distintas rutas con las propiedades <em>CSS</em>. Esto nos da más flexibilidad para personalizarlo dinámicamente.</p><p>Y, por otro lado, proporcionará menos peticiones <em>HTTP</em>. El navegador sabrá cómo cargar ese archivo <em>SVG</em>, así que no necesitaremos molestar al navegador para que solicite ese archivo para incluirlo en la página. </p><p>Dicho esto, sigue siendo una opción válida para añadir un archivo SVG a la página. </p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
