<?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: Iratxe</title>
    <description>The latest articles on DEV Community by Iratxe (@iratxebarrio).</description>
    <link>https://dev.to/iratxebarrio</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%2F1348034%2F4ff7cb5e-9eea-456d-8138-1d095c7a3813.png</url>
      <title>DEV Community: Iratxe</title>
      <link>https://dev.to/iratxebarrio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iratxebarrio"/>
    <language>en</language>
    <item>
      <title>Cómo crear componentes personalizados y reutilizables en React</title>
      <dc:creator>Iratxe</dc:creator>
      <pubDate>Tue, 22 Jul 2025 11:23:06 +0000</pubDate>
      <link>https://dev.to/iratxebarrio/como-crear-componentes-personalizados-y-reutilizables-en-react-21k3</link>
      <guid>https://dev.to/iratxebarrio/como-crear-componentes-personalizados-y-reutilizables-en-react-21k3</guid>
      <description>&lt;p&gt;En mis últimos proyectos he estado creando &lt;strong&gt;componentes personalizados en React&lt;/strong&gt; para poder utilizarlos en diferentes partes de la aplicación. Gracias al uso de las props puedo adaptar mis componentes a cada necesidad específica, esto hace que el código sea más limpio, fácil de mantener y de personalizar.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨¿Qué es un componente personalizado?
&lt;/h2&gt;

&lt;p&gt;Un componente personalizado en React es una función que envuelve una parte de la interfaz de usuario y que se puede reutilizar en distintas partes de la aplicación personalizándolo en cada uso.&lt;/p&gt;

&lt;p&gt;Este tipo de funciones tiene que cumplir una serie de requisitos para poder utilizarlos correctamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deben empezar con mayúscula, no puede ser function button(), tiene que ser function Button().&lt;/li&gt;
&lt;li&gt;Son componentes de React, por lo tanto deben retornar un elemento JSX, por ejemplo  Hola &lt;/li&gt;
&lt;li&gt;Se tiene que exportar para poder utilizarlo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧱 Un ejemplo clásico: el botón
&lt;/h2&gt;

&lt;p&gt;Un botón es un gran ejemplo de componente reutilizable, ya que es un elemento que suele repetirse con diferentes estilos, comportamientos o atributos (como disabled, onClick...).&lt;/p&gt;

&lt;h3&gt;
  
  
  Código del componente:
&lt;/h3&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%2Fkiqk4x8xxrikye9ov43a.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%2Fkiqk4x8xxrikye9ov43a.png" alt="Imagen de un componente personalizado de un elemento &amp;lt;button&amp;gt; " width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En este ejemplo tenemos lo siguiente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Usamos children para renderizar el contenido del botón.&lt;/li&gt;
&lt;li&gt;La propiedad variant nos permite aplicar estilos condicionales (por ejemplo, primario o secundario) y le hemos dado por defecto el valor "default" de esta manera no se aplicarán estilos condicionales si no lo requerimos.&lt;/li&gt;
&lt;li&gt;Con el operador spread (...attributes) pasamos automáticamente todas las demás props sin tener que listarlas una a una. Esto permite una gran flexibilidad ya que podemos añadir disabled, type, onClick, etc., solo cuando lo necesitemos.
También he definido un objeto llamado "variantClass" para manejar los diferentes estilos de la propiedad variant y aplicarlos directamente en "className".&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧪 Ejemplos de uso
&lt;/h3&gt;

&lt;p&gt;Aquí algunos ejemplos de cómo usar este componente personalizado con distintas props:&lt;br&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%2Ff1h5l1mo523sqtwku7e2.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%2Ff1h5l1mo523sqtwku7e2.png" alt="Imagen de cómo utilizar el componente reutilizable con diferentes ejemplos" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y este sería el resultado final en la interfaz:&lt;br&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%2Ff0944t04z58h8lit4tl8.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%2Ff0944t04z58h8lit4tl8.png" alt="Resultado final" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Conclusión
&lt;/h2&gt;

&lt;p&gt;Crear componentes personalizados es una práctica esencial en React. Nos ayuda a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Reutilizar código.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mantener consistencia en la UI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mejorar la mantenibilidad del proyecto.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este ejemplo con un botón puede escalarse a otros elementos como inputs, tarjetas, modales o incluso componentes más complejos.&lt;/p&gt;

&lt;p&gt;¿Lo has utilizado alguna vez?&lt;/p&gt;

&lt;p&gt;Puedes probar el componente directamente aquí:&lt;br&gt;
&lt;a href="https://codesandbox.io/p/devbox/v3l25z" rel="noopener noreferrer"&gt;Ver en CodeSandbox&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cómo instalar y configurar Tailwind CSS 4 con React y Vite (paso a paso)</title>
      <dc:creator>Iratxe</dc:creator>
      <pubDate>Sun, 29 Jun 2025 10:40:23 +0000</pubDate>
      <link>https://dev.to/iratxebarrio/como-instalar-y-configurar-tailwind-css-4-con-react-y-vite-paso-a-paso-3ngc</link>
      <guid>https://dev.to/iratxebarrio/como-instalar-y-configurar-tailwind-css-4-con-react-y-vite-paso-a-paso-3ngc</guid>
      <description>&lt;p&gt;Tailwind CSS 4 ha llegado con muchos cambios interesantes. En este post te mostraré cómo instalarlo, configurarlo y dar los primeros pasos con esta nueva versión, usando React y Vite como base.&lt;/p&gt;

&lt;p&gt;Si necesitas instalarlo en otro entorno (como Next.js, Laravel, PostCSS o incluso desde la CLI), puedes consultar las opciones oficiales en la &lt;a href="https://tailwindcss.com/" rel="noopener noreferrer"&gt;documentación de Tailwind CSS&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Crear el proyecto con Vite + React + TypeScript
&lt;/h2&gt;

&lt;p&gt;Antes de instalar Tailwind, necesitas crear tu proyecto con Vite. Si ya lo tienes creado, puedes saltarte esta parte.&lt;br&gt;
Desde la terminal:&lt;br&gt;
&lt;code&gt;npm create vite&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Elige el nombre del proyecto, las tecnologias (React y TypeScript + SWC) sigue los pasos para la configuración inicial y listo.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ 1. Instalar Tailwind CSS y su plugin para Vite
&lt;/h3&gt;

&lt;p&gt;Una vez creado el proyecto, accede al directorio y ejecuta lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install -D tailwindcss @tailwindcss/vite&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚙️ 2. Configurar Tailwind en vite.config.ts
&lt;/h3&gt;

&lt;p&gt;Importa el paquete de tailwindcss y añadelo dentro del array de plugins que tienes configurado, junto a React.&lt;br&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%2Fs4lozzap9y0m4vlyz362.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%2Fs4lozzap9y0m4vlyz362.png" alt="Configuración del plugin Tailwind en vite.config.ts" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎨 3. Importar Tailwind en tu archivo CSS
&lt;/h3&gt;

&lt;p&gt;En el archivo index.css añade la importación de tailwindcss, de esta manera ya podrías empezar a utilizarlo.&lt;br&gt;
No es necesario importar index.css para que funcione, ¡vamos a verlo!&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%2Ft2w0rswqgog2x041trql.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%2Ft2w0rswqgog2x041trql.png" alt="Directivas de Tailwind CSS en index.css" width="634" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 4. Probar que Tailwind funciona
&lt;/h3&gt;

&lt;p&gt;Para comprobar que funcione borra el contenido por defecto del componente principal (App.tsx) y añade una etiqueta con algunas clases utilitarias de Tailwind.&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%2F3pva2uv041ctbpgtbng6.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%2F3pva2uv041ctbpgtbng6.png" alt="Componente App con estilos Tailwind aplicados" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora ejecuta en la terminal &lt;code&gt;npm run dev&lt;/code&gt; y comprueba en el navegador que funciona:&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%2F9j6ledvya15zb6pd0w4r.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%2F9j6ledvya15zb6pd0w4r.png" alt="Imagen de la web comprobando los estilos aplicados" width="445" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎨 5. Personalizar colores en Tailwind CSS 4
&lt;/h3&gt;

&lt;p&gt;Hasta aquí ya hemos visto que con esta nueva versión apenas hay que hacer configuraciones y podemos fácilmente empezar a trabajar.&lt;br&gt;
Lo siguiente que veremos es cómo configurar nuestras clases unitarias personalizadas en esta nueva versión. &lt;/p&gt;

&lt;p&gt;Una novedad de Tailwind 4 es que ya no necesitas el archivo tailwind.config.ts para personalizar tu configuración. Ahora puedes usar la directiva @ theme directamente en tu index.css.&lt;/p&gt;

&lt;p&gt;Por ejemplo, para añadir una paleta de colores personalizada, puedes usar herramientas como &lt;a href="https://uicolors.app/generate/b3765c" rel="noopener noreferrer"&gt;UI Colors&lt;/a&gt;. Esta herramienta genera un bloque de configuración que puedes pegar 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%2Frjli3c1p83audq7s6oq1.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%2Frjli3c1p83audq7s6oq1.png" alt="Paleta de colores añadida en el archivo index.css" width="772" height="938"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora puedes usar tu color personalizado directamente:&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%2Ff2fd34lfhzcrst3vp6vl.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%2Ff2fd34lfhzcrst3vp6vl.png" alt="Componente App con estilos personalizados de Tailwind" width="800" height="474"&gt;&lt;/a&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%2F6xem01mxjxeal4qu48et.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%2F6xem01mxjxeal4qu48et.png" alt="Imagen de la web aplicando los estilos personalizados" width="429" height="113"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¿Qué te ha parecido esta nueva instalación y configuración de Tailwind CSS 4? &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
