<?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[ Dikson Aranda - 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[ Dikson Aranda - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 24 Jun 2026 19:57:10 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/dreck/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Cómo agregar estilos a tu aplicación de React: 5 formas de escribir CSS en 2021 ]]>
                </title>
                <description>
                    <![CDATA[ Cuando se trata de agregar estilos a una aplicación de React, existen diferentes maneras de hacerlo. ¿Cuál eliges tú? He desglosado las 5 principales formas, entre las que debe elegir al escribir css. No hay una única manera de agregar estilos a cada aplicación de React. Cada proyecto es diferente. ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-agregar-estilos-a-tu-aplicacion-de-react-5-formas/</link>
                <guid isPermaLink="false">63793c680211a808a5f397de</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Dikson Aranda ]]>
                </dc:creator>
                <pubDate>Tue, 20 Dec 2022 19:32:04 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/11/css.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-style-react-apps-with-css/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Style Your React App – 5 Ways to Write CSS in 2021</a>
      </p><p>Cuando se trata de agregar estilos a una aplicación de React, existen diferentes maneras de hacerlo. ¿Cuál eliges tú?</p><p>He desglosado las 5 principales formas, entre las que debe elegir al escribir css.</p><p>No hay una única manera de agregar estilos a cada aplicación de React. Cada proyecto es diferente. Es por eso que al final de cada sección, abordaré las ventajas y desventajas de cada una para ayudarte a elegir la opción que mejor se adapte a tus proyectos.</p><p>¡Empecemos!</p><h2 id="lo-que-estaremos-codificando">Lo que estaremos codificando</h2><p>Para ver como cada código de CSS es diferente, crearemos el mismo ejemplo: una tarjeta testimonial simple, pero limpia.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/11/image-2.png" class="kg-image" alt="image-2" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/11/image-2.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/11/image-2.png 994w" sizes="(min-width: 720px) 720px" width="994" height="440" loading="lazy"></figure><blockquote>¿Quieres desarrollar cada uno de estos ejemplos? Puedes ir a <a href="https://react.new/"><strong>react.new</strong></a> para crear una nueva aplicacion de React instantáneamente✨.</blockquote><h2 id="estilos-en-l-nea"><strong>Estilos en línea</strong></h2><p>Los estilos en línea es una de las maneras directas de dar estilo a cualquier aplicación de React.</p><p>Agregar estilos de esta manera no requiere crear una hoja de estilos (CSS) por separado.</p><p>Esta forma de aplicar los estilos directamente a los elementos, es de alguna manera similar a tener una hoja de estilos, debido a que también tiene mayor prioridad. Esto significa que "anulan" otras reglas de estilos que pueden ser aplicadas a un elemento.</p><p>Aquí esta nuestra carta testimonial con sus estilos en línea:</p><pre><code class="language-js">export default function App() {
  return (
    &lt;section
      style={{
        fontFamily: '-apple-system',
        fontSize: "1rem",
        fontWeight: 1.5,
        lineHeight: 1.5,
        color: "#292b2c",
        backgroundColor: "#fff",
        padding: "0 2em"
      }}
    &gt;
      &lt;div
        style={{
          textAlign: "center",
          maxWidth: "950px",
          margin: "0 auto",
          border: "1px solid #e6e6e6",
          padding: "40px 25px",
          marginTop: "50px"
        }}
      &gt;
        &lt;img
          src="https://randomuser.me/api/portraits/women/48.jpg"
          alt="Tammy Stevens"
          style={{
            margin: "-90px auto 30px",
            width: "100px",
            borderRadius: "50%",
            objectFit: "cover",
            marginBottom: "0"
          }}
        /&gt;
        &lt;div&gt;
          &lt;p
            style={{
              lineHeight: 1.5,
              fontWeight: 300,
              marginBottom: "25px",
              fontSize: "1.375rem"
            }}
          &gt;
            ¡Este es uno de los mejores blogs de desarrolladores del planeta!
             Lo leo a diario para mejorar mis habilidades.
          &lt;/p&gt;
        &lt;/div&gt;
        &lt;p
          style={{
            marginBottom: "0",
            fontWeight: 600,
            fontSize: "1rem"
          }}
        &gt;
          Tammy Stevens
          &lt;span style={{ fontWeight: 400 }}&gt; · Desarrolladora frontend&lt;/span&gt;
        &lt;/p&gt;
      &lt;/div&gt;
    &lt;/section&gt;
  );
}</code></pre><p>A pesar de algunos beneficios rápidos, los estilos en línea son solo una opción aceptable para aplicaciones muy pequeñas. Las dificultades con esto son evidentes a medida que su aplicación crece.</p><p>Como muestra el código anterior, incluso un componente pequeño se convierte en uno grande si los estilos son en línea.</p><p>Sin embargo, un truco fácil y rápido de implementar es poner estilos en línea en variables reutilizables, que se pueden almacenar en un archivo diferente.</p><pre><code class="language-js">const estilos = {
  seccion: {
    fontFamily: "-apple-system",
    fontSize: "1rem",
    fontWeight: 1.5,
    lineHeight: 1.5,
    color: "#292b2c",
    backgroundColor: "#fff",
    padding: "0 2em"
  },
  contenedor: {
    textAlign: "center",
    maxWidth: "950px",
    margin: "0 auto",
    border: "1px solid #e6e6e6",
    padding: "40px 25px",
    marginTop: "50px"
  },
  avatar: {
    margin: "-90px auto 30px",
    width: "100px",
    borderRadius: "50%",
    objectFit: "cover",
    marginBottom: "0"
  },
  cita: {
    lineHeight: 1.5,
    fontWeight: 300,
    marginBottom: "25px",
    fontSize: "1.375rem"
  },
  nombre: {
    marginBottom: "0",
    fontWeight: 600,
    fontSize: "1rem"
  },
  posicion: { fontWeight: 400 }
};

export default function App() {
  return (
    &lt;section style={estilos.seccion}&gt;
      &lt;div style={estilos.contenedor}&gt;
        &lt;img
          src="https://randomuser.me/api/portraits/women/48.jpg"
          alt="Tammy Stevens"
          style={estilos.avatar}
        /&gt;
        &lt;div&gt;
          &lt;p style={estilos.cita}&gt;
            ¡Este es uno de los mejores blogs de desarrolladores del planeta!
             Lo leo a diario para mejorar mis habilidades.
          &lt;/p&gt;
        &lt;/div&gt;
        &lt;p style={estilos.nombre}&gt;
          Tammy Stevens
          &lt;span style={estilos.posicion}&gt;·Desarrolladora frontend&lt;/span&gt;
        &lt;/p&gt;
      &lt;/div&gt;
    &lt;/section&gt;
  );
}</code></pre><p>A pesar de esta mejora, los estilos en línea no tienen un número esencial de características que cualquier hoja de estilo CSS simple podría proporcionar</p><p>Por ejemplo, no puedes escribir animaciones, estilos para elementos anidados (todos los elementos hijos, primer hijo, último hijo), pseudoclases (como :hover), y pseudo elementos (::first-line), por nombrar algunos.</p><p>Si estás creando un prototipo de aplicación, los estilos en linea son una buena opción. Sin embargo, a medida que avanzas en el desarrollo de este, necesitarás cambiar de opción para obtener las funciones básicas de CSS.</p><p>? Ventajas:</p><ul><li>La forma más rápida de escribir estilos.</li><li>Bueno para crear aplicaciones pequeñas (escriba estilos en línea y luego muévase a una hoja de estilos).</li><li>Tiene una gran preferencia (puede anular estilos de una hoja de estilo CSS).</li></ul><p>? Desventajas:</p><ul><li>Es tedioso convertir CSS plano a estilos en linea.</li><li>Un montón de estilos en línea hacen que JSX (React) sea ilegible.</li><li>No puedes usar características básicas de CSS como animaciones, selectores,etc</li><li>No escala bien</li></ul><h2 id="css-simple"><strong>CSS simple</strong></h2><p>En lugar de usar estilos en línea, es más común importar hojas de estilo CSS.</p><p>Escribir en una hoja de estilos CSS es probablemente el enfoque mas básico de agregar estilos a nuestra aplicacion de React, pero no debe descartarse fácilmente.</p><p>Los estilos en CSS plano están mejorando todo el tiempo, debido al aumento de características disponibles en el estándar.</p><p>Esto incluye características como variables para guardar valores dinámicos, todo tipo de selectores avanzados para seleccionar elementos con precisión, y nuevas pseudoclasses como <code>:is</code> and <code>:where</code> .</p><p>Aquí esta nuestra carta testimonial escrito en CSS plano importado en la parte superior de nuestra aplicación de React:</p><pre><code class="language-css">/* src/estilos.css */

body {
  font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  margin: 0;
  font-size: 1rem;
  font-weight: 1.5;
  line-height: 1.5;
  color: #292b2c;
  background-color: #fff;
}
.testimonial {
  margin: 0 auto;
  padding: 0 2em;
}
.testimonial-contenedor {
  text-align: center;
  max-width: 950px;
  margin: 0 auto;
  border: 1px solid #e6e6e6;
  padding: 40px 25px;
  margin-top: 50px;
}
.testimonial-cita p {
  line-height: 1.5;
  font-weight: 300;
  margin-bottom: 25px;
  font-size: 1.375rem;
}
.testimonial-avatar {
  margin: -90px auto 30px;
  width: 100px;
  border-radius: 50%;
  object-fit: cover;
  margin-bottom: 0;
}
.testimonial-nombre {
  margin-bottom: 0;
  font-weight: 600;
  font-size: 1rem;
}
.testimonial-nombre span {
  font-weight: 400;
}</code></pre><pre><code class="language-js">// src/App.js

import "./estilos.css";

export default function App() {
  return (
    &lt;section className="testimonial"&gt;
      &lt;div className="testimonial-contenedor"&gt;
        &lt;img
          className="testimonial-avatar"
          src="https://randomuser.me/api/portraits/women/48.jpg"
          alt="Tammy Stevens"
        /&gt;
        &lt;div className="testimonial-cita"&gt;
          &lt;p&gt;
            ¡Este es uno de los mejores blogs de desarrolladores del planet!
             Lo leo a diario para mejorar mis habilidades.
          &lt;/p&gt;
        &lt;/div&gt;
        &lt;p className="testimonial-nombre"&gt;
          Tammy Stevens&lt;span&gt;· Desarrolladora frontend&lt;/span&gt;
        &lt;/p&gt;
      &lt;/div&gt;
    &lt;/section&gt;
  );
}</code></pre><p>Para nuestra carta testimonial, &nbsp;nota que estamos creando clases que son aplicadas a cada elemento individual. Todas estas clases comienzan con el mismo nombre <code>testimonial-</code>.</p><p>CSS escrito en una hoja de estilos es una excelente primera opción para su aplicación. A diferencia de los estilos en línea, puede diseñar su aplicación de cualquier forma que necesite.</p><p>Un problema menor podría ser su convención de nomenclatura. Una vez que tenga una aplicación grande, se vuelve más dificil pensar en nombres de clase únicos para sus elementos, especialmente cuando tienes 5 divs envueltos uno dentro de otro.</p><p>Si no tiene una convención de nomenclatura en la que confíe (por ejemplo: BEM), puede ser más fácil cometer errores, además de crear varias clases con el mismo nombre, lo que genera conflictos.</p><p>Adicionalmente, escribir CSS normal puede ser verboso y repetitivo que herramientas más nuevas como SASS/SCSS. Como resultado, esto puede tomar un poco más de tiempo escribir sus estilos en CSS en comparación a estas o una librería de CSS en Javascript.</p><p>Además, es importante tener en cuenta que CSS se aplica en cascada a todos los elementos secundarios, si tú aplicas una hoja de estilos CSS a un componente no solo se limita a este.</p><p>Si tienes confianza con CSS, es definitivamente una opción viable.</p><p>Con eso dicho, existe una serie de librerias de CSS que nos brindan todo el poder de CSS con menos código e incluidas algunas características que CSS nunca tendría por si solo (como limitar los estilos y prefijos CSS del navegador).</p><p>? Ventajas:</p><ul><li>Nos da todas las herramientas modernas de CSS (variables, selectores avanzados, nuevas pseudoclases, etc).</li><li>Ayuda a mantener limpio nuestros componentes de estilos en línea.</li></ul><p>? Desventajas:</p><ul><li>Necesita configurar los prefijos de navegador para asegurar que las funciones más recientes funcionen para todos los ususarios.</li><li>Requiere escribir más y a veces código repetitivo que otras librerías de CSS (SASS).</li><li>Cualquier hoja de estilo en cascada importada a un componente, afecta támbien a sus componentes hijos, no está limitado al componente.</li><li>Debe usar una convención de nomenclatura confiable para garantizar que los estilos no entren en conflicto.</li></ul><h2 id="sass-scss"><strong>SASS / SCSS</strong></h2><p>¿Qué es SASS? SASS es un acrónimo que significa: Syntactically Awesome Style Sheets u Hojas de estilo sintácticamente asombrosas.</p><p>SASS nos brinda poderosas herramientas, algunas de las cuales no existen en una hoja de estilos CSS normal. Esto incluye características como variables, estilos extendidos y anidamiento.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/07/Screen-Shot-2021-07-14-at-12.36.47-PM.png" class="kg-image" alt="Screen-Shot-2021-07-14-at-12.36.47-PM" width="600" height="400" loading="lazy"></figure><p>SASS nos permite escribir estilos en dos tipos diferentes de hoja de estilos, con las extensiones .scss y .sass.</p><p>Los estilos SCSS están escritos en una sintaxis similar a CSS normal, sin embargo los estilos de SASS no requieren usar llaves de apertura ( { ) y cierre ( } ) .</p><p>Aquí hay un rápido ejemplo de una hoja de estilos SCSS con algunos estilos anidados:</p><pre><code class="language-css">/* estilos.scss */

nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li { display: inline-block; }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}</code></pre><p>Compara este ejemplo con el mismo codigo escrito en SASS:</p><pre><code class="language-css">/* estilos.sass */

nav
  ul
    margin: 0
    padding: 0
    list-style: none

  li
    display: inline-block

  a
    display: block
    padding: 6px 12px
    text-decoration: none

</code></pre><p>Dado que esto no es CSS normal, debe compilarse a CSS plano. Para hacer esto en nuestras aplicaciones de React, puedes usar una librería como node-sass.</p><p>Si estás usando un proyecto creado con create-react-app, y quieres usar SASS o SCSS, puedes instalar node-sass con npm:</p><pre><code class="language-bash">npm install node-sass</code></pre><p>Aquí está nuestra carta testimonial hecha con SCSS:</p><pre><code class="language-css">/* src/estilos.scss */

$fuentes: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
$color-texto: #292b2c;

%fuente-basica {
  font-size: 1rem;
}

body {
  @extend %fuente-basica;
  font-family: $fuentes;
  color: $color-texto;
  margin: 0;
  font-size: 1rem;
  font-weight: 1.5;
  line-height: 1.5;
  background-color: #fff;
}

/* reglas sin cambio omitidas */

.testimonial-nombre {
  @extend %fuente-basica;
  margin-bottom: 0;
  font-weight: 600;

  span {
    font-weight: 400;
  }
}</code></pre><p>Estos estilos nos dan las siguientes características: variables, estilos extendidos y anidamiento.</p><p><strong><strong>Variables</strong></strong>: Puedes usar valores dinámicos escribiendo variables, justo como en Javascript, declarándolos con &nbsp;<code>$</code> &nbsp;al principio.</p><p>Aquí tenemos dos variables que pueden ser usados en múltiples reglas <code>$fuentes</code>, <code>$color-texto</code>.</p><p><strong><strong>Extendi</strong>endo<strong> / </strong>Herencia</strong>: &nbsp;Puedes agregar reglas de estilos extendiéndolas. Para hacer esto, tienes que crear tu propio selector el cual puede ser reutilizado como variable. El nombre de las reglas que quieres extender debe comenzar con &nbsp;<code>%</code>. </p><p>La variable <code>%fuente-basica</code> es heredada por las reglas &nbsp;<code>body</code> &nbsp;y &nbsp;<code>.testimonial-nombre</code>. </p><p><strong>Anidamiento</strong>: En lugar de escribir multiples reglas que comiencen con el mismo selector, puedes anidarlas.</p><p>En &nbsp;<code>.testimonial-nombre</code>, usamos un selector de anidamiento para apuntar al elemento <code>span</code> dentro de él.</p><p>Puedes encontrar una versión de una aplicación de React con SCSS <a href="https://codesandbox.io/s/react-and-scss-forked-2xeu0?file=/src/styles.scss">aquí</a></p><p>? Ventajas:</p><ul><li>Incluye muchas características dinámicas de CSS como el poder de extender las reglas, anidamiento, y mixins.</li><li>Los estilos con SCSS son mucho menos repetitivos que CSS normal.</li></ul><p>? Desventajas:</p><ul><li>Similar a CSS plano, los estilos son globales y no se limitan a un componente.</li><li>Las hojas de estilos CSS están comenzando a incluir un número de características que SASS tenía exclusivamente, como variables por ejemplo.</li><li>SASS / SCSS con frecuencia requieren una configuración, como instalar la librería de Node <code>node-sass</code>.</li></ul><h2 id="m-dulos-de-css"><strong>Módulos de CSS</strong></h2><p>Los módulos de CSS son otra alternativa ligera a algo como CSS o SASS</p><p>Lo bueno de los módulos de CSS es que pueden ser usado con CSS normal o SASS. Además, si está usando Create React App puede comenzar usando módulos de CSS sin ninguna configuración.</p><p>Aquí está nuestra aplicación escrita con módulos de CSS:</p><pre><code class="language-css">/* src/estilos.module.css */

body {
  font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  margin: 0;
  font-size: 1rem;
  font-weight: 1.5;
  line-height: 1.5;
  color: #292b2c;
  background-color: #fff;
}

/* estilos excluidos */

.testimonial-nombre span {
  font-weight: 400;
}</code></pre><pre><code class="language-js">import estilos from './estilos.module.css';

export default function App() {
  return (
    &lt;section className={estilos.testimonial}&gt;
      &lt;div className={estilos['testimonial-contenedor']}&gt;
        &lt;img
          src="https://randomuser.me/api/portraits/women/48.jpg"
          alt="Tammy Stevens"
          className={estilos['testimonial-avatar']}
        /&gt;
        &lt;div&gt;
          &lt;p className={estilos['testimonial-cita']}&gt;
            ¡Este es uno de los mejores blogs de desarrolladores del planeta!
             Lo leo a diario para mejorar mis habilidades.
          &lt;/p&gt;
        &lt;/div&gt;
        &lt;p className={estilos['testimonial-name']}&gt;
          Tammy Stevens
          &lt;span&gt; · Desarrolladora Frontend&lt;/span&gt;
        &lt;/p&gt;
      &lt;/div&gt;
    &lt;/section&gt;
  );
}</code></pre><p>Nuestro archivo CSS tiene el nombre <code>.module</code> antes de la extensión &nbsp;<code>.css</code> . Cualquier módulo de CSS debe incluir ".module" en el nombre del archivo y terminar con la extensión apropiada (si estamos usando CSS o SASS/SCSS).</p><p>Lo que es interesante notar si miramos el código anterior, es que los módulos de CSS &nbsp;están escrito como CSS normal, pero son importados y usados como si fueran como objetos (estilos en línea).</p><p>El beneficio de los módulos de CSS es que ayuda a evitar problemas con los conflictos de nombres de clases que tiene CSS. Las propiedades que estamos referenciando se convierten en nombres de clase únicas que no pueden entrar en conflicto entre sí.</p><p>Nuestros elementos HTML generados se verán así:</p><pre><code class="language-html">&lt;p class="_estilos__testimonial-nombre_309571057"&gt;
  Tammy Stevens
&lt;/p&gt;</code></pre><p>Además, modulos de CSS resuelven el problema del alcance global de CSS. Comparado con nuestra hoja de estilos CSS normal, el CSS usando módulos para componentes individuales no afectará en cascada a los componentes hijos.</p><p>Por lo tanto, los módulos de CSS son mejores para usar que CSS normal o SASS para asegurarte de que los nombres de clases no entren en conflicto, y &nbsp;escribir estilos predecibles que solo sean aplicados a uno u otro componente.</p><p>? Ventajas:</p><ul><li>Los estilos tienen un alcance a uno u otro componente específico (a diferencia de CSS / SASS).</li><li>Único, genera nombres de clases que aseguran no entrar en conflicto.</li><li>Pueden ser usados inmediatamanete sin configuración en proyectos CRA.</li><li>Pueden ser usados con SASS / CSS</li></ul><p>? Desventajas:</p><ul><li>Puede ser complicado hacer referencias a nombres de clases.</li><li>Puede ser complicado usar estilos CSS como propiedades de objetos.</li></ul><h2 id="css-en-javascript"><strong>CSS en Javascript</strong></h2><p>Similar a como React nos permite escribir HTML con Javascript con JSX, CSS en Js ha hecho algo similar con CSS.</p><p>CSS en JS nos permite escribir estilos CSS directamente en los acrhivos (.js) de nuestros componentes.</p><p>No solo permite escribir CSS sin tener un solo archivo .css, si no que estos estilos se limitan a componentes individuales.</p><p>En otras palabras, puedes agregar, cambiar o remover estilos de CSS sin sorpresas. Cambiar los estilos de un componente no afectará a los estilos del resto de tu aplicación.</p><p>CSS en JS cons frecuencia hace uso de un tipo especial de funcion de javascript llamada un literal de plantilla etiquetada. !Lo bueno de esto es que podemos escribir estilos de CSS directamente en nuestro archivo JS¡.</p><p>Aquí hay un ejemplo rapido de una librería popular de CSS en JS, Styled Components:</p><pre><code class="language-js">import styled from "styled-components";

const Boton = styled.button`
  color: limegreen;
  border: 2px solid limegreen;
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border-radius: 3px;

  &amp;:hover {
    opacity: 0.9;
  }
`;

export default function App() {
  return (
    &lt;div&gt;
      &lt;Boton&gt;Click me&lt;/Boton&gt;
    &lt;/div&gt;
  );
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/07/Screen-Shot-2021-07-14-at-11.18.06-AM.png" class="kg-image" alt="Screen-Shot-2021-07-14-at-11.18.06-AM" width="600" height="400" loading="lazy"></figure><p>Tenga en cuenta algunas cosas aquí:</p><ol><li>Puedes escribir estilos de CSS normal, pero puede incluir anidamiento de estilos y pseudoclases (como :hover).</li><li>Puedes asociar estilos a cualquier elemento HTML válido, como el elemento "button" de arriba ( <code>styled.button</code>).</li><li>Puedes crear nuevos componentes con estos estilos asociados. Vea como <code>Boton</code> es usado en nuestro componente App.</li></ol><p>Ya que es un componente, ¿podemos pasarle parámetros? !Sí ¡ Podemos exportar este componente y usarlo donde sea requerido, además de darle características dinámicas a travéz de parámetros.</p><p>Digamos que desea una variante del botón de arriba con un fondo y texto opuestos. No hay problema. </p><p>Pasemos el parámetro <code>opuesto</code> a un segundo botón. En el componente <code>Boton</code> puede acceder a todos los parámetros pasados usando <code>${}</code> con una función interna.</p><pre><code class="language-js">import styled from "styled-components";

const Boton = styled.button`
  background: ${props =&gt; props.opuesto ? "limegreen" : "white"};
  color: ${props =&gt; props.opuesto ? "white" : "limegreen"};
  border: 2px solid limegreen;
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border-radius: 3px;

  &amp;:hover {
    opacity: 0.9;
  }
`;

export default function App() {
  return (
    &lt;div&gt;
      &lt;Button&gt;Click me&lt;/Button&gt;
      &lt;Button opuesto&gt;Click me&lt;/Button&gt;
    &lt;/div&gt;
  );
}
</code></pre><p>En el retorno de la función, puedes seleccionar el parámetro <code>opuesto</code> &nbsp;y usar el operador ternario para determinar el color de fondo y del texto, condicionalmente.</p><p>Este es el resultado:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/07/Screen-Shot-2021-07-14-at-11.31.52-AM.png" class="kg-image" alt="Screen-Shot-2021-07-14-at-11.31.52-AM" width="600" height="400" loading="lazy"></figure><p>Hay muchos más beneficios al usar una libreria de CSS en JS para agregar estilos a tus aplicaciones de React (demasiados para cubrirlos aquí), algunos de los cuales enumeraré a continuación.</p><p>Asegúrese de revisar las dos más populares librerias de CSS en JS for React: Emotion y Styled Components.</p><p>Un incoveniente de usar librerías de CSS en JS es añadir una librería adicional a tu proyecto. Sin embargo, diría que esto vale la pena pues mejora la experiencia de desarrollo de sus aplicaciones de React en lugar de CSS normal.</p><p>? Ventajas:</p><ul><li>Los estilos se limitan a componentes individuales.</li><li>Ya que su CSS es ahora JS, puede exportar, reutilizar, e incluso extender sus estilos a travez de parámetros.</li><li>Librerías de CSS en JS evitan los conflictos generando un nombre de clase único para sus estilos.</li><li>No necesita enfocarse en usar convenciones de nomenclatura para sus clases !solo en escribir los estilos¡.</li></ul><p>? Desventajas:</p><ul><li>A diferencia de CSS normal, necesitará instalar uno o más librerías de terceros, lo cual añade mayor tamaño a su proyecto.</li></ul><h2 id="conclusi-n"><strong>Conclusión</strong></h2><p>Tenga en cuenta que no incluí librerías de componentes en los ejemplos. Quería enfocarme principalmente en las diferentes formas en las que puede agregar estilos.</p><p>Tenga en cuenta que elegir una librería con componentes y estilos prefabricados como Material UI o Ant Design (por nombrar un par) es una opción totalmente válida para su proyecto.</p><p>Espero que esta guía le haya ayudado a comprender mejor como agregar estilos a sus aplicaciones de React, y que enfoque elegir para sus próximos proyectos.</p><h2 id="-quiere-saber-m-s-nase-a-el-bootcamp-de-react"><strong>¿Quiere saber más? Únase a El Bootcamp de React</strong></h2><p><a href="http://bit.ly/join-react-bootcamp">El Bootcamp de React</a> toma todo lo que debería saber sobre el aprendizaje de React y lo agrupa en un paquete completo, incluido videos y bonificaciones especiales.</p><p>Obten información privilegiada que cientos de desarrolladores ya han utilizado para dominar React, encontrar el trabajo de sus sueños, y tomar control de su futuro:</p><figure class="kg-card kg-image-card"><img src="https://reedbarger.nyc3.digitaloceanspaces.com/react-bootcamp-banner.png" class="kg-image" alt="The React Bootcamp" width="600" height="400" loading="lazy"></figure> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo usar la desestructuración de arreglos y objetos en JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ La asignación de desestructuración es una poderosa característica que vino con ES6 (ECMAScript6). La desestructuración es una expresión de JavaScript que hace posible extraer valores de los arreglos, o propiedades de objetos, en otras variables. Es decir, podemos obtener datos de arreglos y objetos, y asignarlos a variables. ¿Por qué ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-usar-la-desestructuracion-de-arreglos-y-objetos-en-javascript/</link>
                <guid isPermaLink="false">62d87cbcb4def50851973d5f</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Dikson Aranda ]]>
                </dc:creator>
                <pubDate>Tue, 16 Aug 2022 02:04:10 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/08/bg.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/array-and-object-destructuring-in-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Use Array and Object Destructuring in JavaScript</a>
      </p><p>La asignación de desestructuración es una poderosa característica que vino con ES6 (ECMAScript6). La desestructuración es una expresión de JavaScript que hace posible extraer valores de los arreglos, o propiedades de objetos, en otras variables. Es decir, podemos obtener datos de arreglos y objetos, y asignarlos a variables.</p><p>¿Por qué esto es necesario?</p><p>Imagina que queremos extraer la información de un arreglo. Anteriormente, ¿cómo se haría esto?</p><pre><code class="language-javascript">let introduccion = ["Hola", "yo" , "soy", "Sara"];
let saludo = introduccion[0];
let nombre = introduccion[3];

console.log(saludo);//"Hola"
console.log(nombre);//"Sara"
</code></pre><p>Podemos ver que cuando queremos obtener los datos de un arreglo, tenemos que hacer lo mismo una y otra vez.</p><p>La asignación de desestructuración hace que esto sea más fácil. ¿Cómo es esto?.Primero, discutamos la asignación de desestructuración con arreglos. Luego pasaremos a la desestructuración de objetos. </p><p>Empecemos.</p><h2 id="desestructuraci-n-b-sica-de-un-arreglo"><strong>Desestructuración básica de un arreglo</strong></h2><p>Si queremos extraer datos de arreglos, es bastante simple usando la asignación de desestructuración.</p><p>Veamos nuestro primer ejemplo para arreglos. En lugar de repetir lo mismo, podemos hacer esto:</p><pre><code class="language-javascript">let introduccion = ["Hola", "yo" , "soy", "Sara"];
let [saludo, pronombre] = introduccion;

console.log(saludo);//"Hola"
console.log(pronombre);//"yo"</code></pre><p>También podemos hacer esto con el arreglo.</p><pre><code class="language-javascript">let [saludo, pronombre] = ["Hola", "yo" , "soy", "Sara"];

console.log(saludo);//"Hola"
console.log(pronombre);//"yo"</code></pre><h3 id="declarando-variables-antes-de-la-asignaci-n"><strong>Declarando variables antes de la asignación </strong></h3><p>Las variables pueden ser declaradas antes de su asignación, algo como esto:</p><pre><code class="language-javascript">let saludo, pronombre;
[saludo, pronombre] = ["Hola", "yo" , "soy", "Sara"];

console.log(saludo);//"Hola"
console.log(pronombre);//"yo"</code></pre><p>Nota que las variables son establecidas de izquierda a derecha. De esta manera la primera variable obtiene el valor del primer elemento del arreglo, la segunda variable obtiene el valor del segundo elemento del arreglo, y así sucesivamente.</p><h3 id="excluyendo-elementos-en-un-arreglo"><strong>Excluyendo elementos en un arreglo</strong></h3><p>¿Qué pasa si queremos obtener el primer y el último elemento de nuestro arreglo, en lugar de obtener solo el primer y el segundo elemento, y queremos asignar estos valores solo a dos variables?. Esto también se puede hacer.</p><p>Observa el siguiente ejemplo:</p><pre><code class="language-javascript">let [saludo,,,nombre] = ["Hola", "yo" ,"soy", "Sara"];

console.log(saludo);//"Hola"
console.log(nombre);//"Sara"
</code></pre><p>¿Qué ha sucedido?</p><p>Observa la asignación en la parte izquierda del arreglo. Nota que en lugar de usar una coma, usamos tres. La coma es usada para omitir valores en un arreglo. Entonces, si desea omitir un elemento en un arreglo, use una coma.</p><p>Hagamos otro ejercicio. Omitamos el primer y tercer elemento en la lista. ¿Cómo haríamos esto?</p><pre><code class="language-javascript">let [,pronombre,,nombre] = ["Hola", "yo" , "soy", "Sara"];

console.log(pronombre);//"yo"
console.log(nombre);//"Sara"

</code></pre><p>De esta manera, la coma hace su magia. Así que si queremos excluir todos los elementos, haríamos esto.</p><pre><code class="language-javascript">let [,,,,] = ["Hola", "yo" , "soy", "Sara"];

</code></pre><h3 id="asignaci-n-del-resto-de-un-arreglo"><strong>Asignación del resto de un arreglo</strong></h3><p>¿Qué pasa si queremos asignar algunos valores de un arreglo a una variable y el resto a otra?. En este caso, podríamos hacer esto:</p><pre><code class="language-javascript">let [saludo,...introduccion] = ["Hola", "yo" , "soy", "Sara"];

console.log(saludo);//"Hola"
console.log(introduccion);//["yo", "soy", "Sara"]
</code></pre><p>Usando este patrón, puedes obtener y asignar la parte del arreglo faltante a una variable.</p><h3 id="asignaci-n-de-desestructuraci-n-con-funciones"><strong>Asignación de desestructuración con funciones</strong></h3><p>Podemos extraer los datos de un arreglo devuelto por una función. Digamos que tenemos una función que retorna un arreglo, como en el ejemplo:</p><pre><code class="language-javascript">function obtenerArreglo() {
    return ["Hola", "yo" , "soy", "Sara"];
} 
let [saludo,pronombre] = obtenerArreglo();

console.log(saludo);//"Hola"
console.log(pronombre);//"yo"
</code></pre><p>Obtenemos los mismos resultados.</p><h3 id="usando-valores-por-defecto"><strong>Usando valores por defecto</strong></h3><p>Se pueden asignar valores por defecto a las variables en caso de que el valor que extraemos de un arreglo sea &nbsp;<code>undefined</code>:</p><pre><code class="language-javascript">let [saludo = "Holi",nombre = "Sara"] = ["Hola"];

console.log(saludo);//"Hola"
console.log(nombre);//"Sara"
</code></pre><p>De esta manera <code>nombre</code> es "Sara", porque no está definido en el arreglo.</p><h3 id="intercambio-de-valores-usando-la-asignaci-n-de-desestructuraci-n"><strong>Intercambio de valores usando la asignación de desestructuración</strong></h3><p>Una cosa más. Podemos usar la asignación de desestructuración para intercambiar valores de las variables.</p><pre><code class="language-javascript">let a = 3;
let b = 6;

[a,b] = [b,a];

console.log(a);//6
console.log(b);//3
</code></pre><p>A continuación, pasemos a la desestructuración de objetos.</p><h2 id="desestructuraci-n-de-objetos"><strong>Desestructuración de objetos</strong></h2><p>Primero, miremos porque es necesaria la desestructuración de objetos.</p><p>Digamos que queremos extraer datos de un objeto, y asignarlos a nuevas variables. Antes de ES6, ¿cómo se haría esto?</p><pre><code class="language-javascript">let persona = {nombre: "Sara", pais: "Nigeria", trabajo: "Desarrolladora"};

let nombre = persona.nombre;
let pais = persona.pais;
let trabajo = persona.trabajo;

console.log(nombre);//"Sara"
console.log(pais);//"Nigeria"
console.log(trabajo);//Desarrolladora"
</code></pre><p>Mira lo tedioso que es hacer esto. Estamos repitiendo lo mismo. La desestructuración de ES6 realmente salva el día. Veamos como es esto.</p><h3 id="desestructuraci-n-b-sica-de-objetos"><strong>Desestructuración básica de objetos</strong></h3><p>Repitamos el ejemplo anterior con ES6. En lugar de asignar los valores uno por uno podemos usar el objeto de la izquierda para extraer los datos:</p><pre><code class="language-javascript">    
let persona = {nombre: "Sara", pais: "Nigeria", trabajo: "Desarrolladora"};

let {nombre, pais, trabajo} = persona;

console.log(nombre);//"Sara"
console.log(pais);//"Nigeria"
console.log(trabajo);//Desarrolladora"

</code></pre><p>Obtendrás los mismos resultados. También es válido asignar variables a un objeto que no ha sido declarado:</p><pre><code class="language-javascript">let {nombre, pais, trabajo} = {nombre: "Sarah", pais: "Nigeria", trabajo: "Desarrolladora"};

console.log(nombre);//"Sara"
console.log(pais);//"Nigeria"
console.log(trabajo);//Desarrolladora"
</code></pre><h3 id="variables-declaradas-antes-de-ser-asignadas"><strong>Variables declaradas antes de ser asignadas</strong></h3><p>Variables en objetos pueden ser declarados antes de ser asignadas con desestructuración. Intentemos esto:</p><pre><code class="language-javascript">let persona = {nombre: "Sara", pais: "Nigeria", trabajo: "Desarrolladora"}; 
let nombre, pais, trabajo;

{nombre, pais, trabajo} = persona;

console.log(nombre);// Error : "Unexpected token ="

</code></pre><p>Espera, ¡¿Qué acaba de pasar?!. Oh, olvidamos agregar <code>()</code> antes de las llaves.</p><p>Los paréntesis alrededor de la declaración de asignación es una sintaxis requerida cuando usamos la asignación de desestructuración sin una declaración. Esto es así porque los <code>{}</code> en el lado izquierdo se considera un bloque y no un objeto literal. Así que aquí está como hacer esto de la marea correcta:</p><pre><code class="language-javascript">let persona = {nombre: "Sara", pais: "Nigeria", trabajo: "Desarrolladora"};
let nombre, pais, job;

({nombre, pais, trabajo} = persona);

console.log(nombre);//"Sara"
console.log(trabajo);//"Desarrolladora"

</code></pre><p>También es importante tener en cuenta que al usar esta sintaxis, los <code>()</code> deberían estar precedidos por una coma. De lo contrario, podría usarse para ejecutar una función de la línea anterior. </p><p>Tenga en cuenta que las variables en el objeto del lado izquierdo deben tener el mismo nombre que las propiedades del objeto <code>persona</code>. Si los nombres son diferentes, obtendremos un <code>undefined</code>:</p><pre><code class="language-javascript">let persona = {nombre: "Sara", pais: "Nigeria", trabajo: "Developer"};

let {nombre, amigos, trabajo} = persona;

console.log(nombre);//"Sara"
console.log(amigos);//undefined
</code></pre><p>Pero si queremos usar un nuevo nombre de variable, bueno, podemos hacerlo.</p><h3 id="usando-un-nuevo-nombre-de-variable"><strong>Usando un nuevo nombre de variable</strong></h3><p>Si queremos asignar valores de un objeto a una nueva variable en lugar de usar el nombre de su propiedad, podemos hacer esto:</p><pre><code class="language-javascript">let persona = {nombre: "Sara", pais: "Nigeria", trabajo: "Desarrolladora"};

let {nombre: otroNombre, trabajo: laburo} = persona;

console.log(otroNombre);//"Sara"
console.log(laburo);//"Desarrolladora"
</code></pre><p>Entonces los valores extraídos son pasados a las nuevas variables <code>otroNombre</code> y <code>laburo</code>.</p><h3 id="usando-valores-por-defecto-1"><strong>Usando valores por defecto</strong></h3><p>Valores por defecto también pueden ser usados en la desestructuración de objetos, en caso de que una variable sea <code>undefined</code> en un objeto del que desea extraer datos.</p><pre><code class="language-javascript">let persona = {nombre: "Sara", pais: "Nigeria", trabajo: "Developer"};

let {nombre = "myNombre", amiga = "Annie"} = persona;

console.log(nombre);//"Sara"
console.log(amiga);//"Annie"
</code></pre><p>Entonces, si el valor no es <code>undefined</code>, la variable guarda el valor extraído del objeto como en el caso de <code>nombre</code>. De lo contrario, es usado el valor predeterminado como en el caso de <code>amiga</code>.</p><p>También podemos establecer valores por defecto cuando asignamos valores a una nueva variable:</p><pre><code class="language-javascript">let persona = {nombre: "Sara", pais: "Nigeria", trabajo: "Desarrolladora"};

let {nombre:otroNombre = "myName", amiga: compañera = "Annie"} = persona;

console.log(otroNombre);//"Sara"
console.log(compañera);//"Annie"
</code></pre><p>Entonces <code>nombre</code> fue extraído de persona y asignado a una variable diferente. La variable <code>amiga</code>, por otra parte, fue <code>undefined</code> en <code>persona</code>, por lo que la variable <code>compañera</code> tiene asignado el valor por defecto.</p><h3 id="nombre-de-propiedad-calculado"><strong>Nombre de propiedad calculado</strong></h3><p>El nombre de propiedad calculado es otra característica de los objetos que también funciona para la desestructuración. Puedes especificar el nombre de una propiedad a través de una expresión, si lo pone entre corchetes.</p><pre><code class="language-javascript">let propiedad = "nombre";

let {[propiedad] : otroNombre} = {nombre: "Sara", pais: "Nigeria", trabajo: "Desarrolladora"};

console.log(otroNombre);//"Sara"

</code></pre><h3 id="combinando-arreglos-con-objetos"><strong>Combinando arreglos con objetos</strong></h3><p>Arreglos también pueden ser usados con objetos en la desestructuración de objetos.</p><pre><code class="language-javascript">let persona = {nombre: "Sara", pais: "Nigeria", amigas: ["Annie", "Becky"]};

let {nombre:otroNombre, amigas: compañeras} = persona;

console.log(otroNombre);//"Sara"
console.log(compañeras);//["Annie", "Becky"]
</code></pre><h3 id="anidamiento-en-desestructuraci-n-de-objetos"><strong>Anidamiento en desestructuración de Objetos</strong></h3><p>Objetos también pueden ser anidados al desestructurar:</p><pre><code class="language-javascript">let persona = {
    nombre: "Sara",
    lugar: {
        pais: "Nigeria", 
        ciudad: "Lagos" }, 
    amigas : ["Annie", "Becky"]
};

let {nombre:otroNombre,
     lugar: {
         pais : region,
         ciudad : x}
    } = persona;

console.log(otroNombre);//"Sarah"
console.log(region);//"Nigeria"
</code></pre><h3 id="resto-en-la-desestructuraci-n-de-objetos"><strong>Resto en la desestructuración de objetos</strong></h3><p>La sintaxis del resto también se puede usar para obtener los valores restantes. Esas claves y sus valores se copian en un nuevo objeto:</p><pre><code class="language-javascript">let persona = {nombre: "Sara", pais: "Nigeria", trabajo: "Desarrolladora" amigas: ["Annie", "Becky"]};

let {nombre, amigas, ...otros} = persona;

console.log(nombre);//"Sara"
console.log(amigas);//["Annie", "Becky"]
console.log(otros);// {pais: "Nigeria", trabajo: "Desarrolladora"}
</code></pre><p>Aquí, las propiedades restantes, que no han sido extraídas, se asignan a la variable <code>otros</code>. La sintaxis del resto es <code>...otros</code>. La variable <code>...otros</code> se puede renombrar a cualquier variable que desee.</p><p>Una última cosa: veamos como se puede usar la desestructuración de objetos en funciones.</p><h3 id="desestructuraci-n-de-objetos-en-funciones"><strong>Desestructuración de objetos en funciones</strong></h3><p>La desestructuración de objetos se puede utilizar para asignar parámetros a las funciones:</p><pre><code class="language-javascript">function persona({nombre: x, trabajo: y} = {}) {
    console.log(x);
}

persona({nombre: "Michelle"});//"Michelle"
persona();//undefined
persona(amiga);//Error : amiga is not defined

</code></pre><p>Observa los <code>{}</code> en el lado derecho del objeto de parámetros. Nos permite llamar a la función sin pasar ningún argumento. Es por eso que no obtenemos un <code>undefined</code>. Si removemos esto, obtendremos un mensaje de error.</p><p>También podemos asignar valores por defecto a los parámetros.</p><pre><code class="language-javascript">function persona({nombre: x = "Sara", trabajo: y = "Desarrolladora"} = {}) {
    console.log(x);
}

persona({nombre});//"Sara"
</code></pre><p>Podemos hacer un muchas cosas con la desestructuración de Objetos y Arreglos como hemos visto en los ejemplos anteriores.</p><p>Gracias por leer. :)</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
