Logo AndercDev
Volver al blog
Atomic design

Atomic Design en React y Next.js: cómo escalar tu frontend sin perder el control

Si trabajas con **React o Next.js**, seguramente ya te pasó esto: el proyecto crece, aparecen componentes duplicados, nadie sabe cuál usar y el frontend se vuelve difícil de mantener. Atomic Design no es solo una idea teórica. En **React + Next.js** es una forma muy efectiva de **organizar componentes, escalar la UI y mantener consistencia**. En este post te muestro **cómo aplicar Atomic Design en Next.js paso a paso**, con ejemplos reales.

Anderson CastañoAnderson Castaño
19 de diciembre de 20255 min de lectura

Cuando trabajas con React o Next.js, hay un problema que aparece tarde o temprano: el proyecto crece, los componentes se duplican, los nombres dejan de tener sentido y mantener el frontend se vuelve cada vez más costoso.

Atomic Design no es solo una teoría de diseño visual. En frontend, y especialmente en React + Next.js, es una forma muy efectiva de organizar componentes, escalar la UI y mantener consistencia en proyectos reales.

En este artículo te explico cómo aplicar Atomic Design en React y Next.js, con ejemplos prácticos y una estructura que funciona en proyectos modernos.


¿Qué es Atomic Design?

Atomic Design es una metodología propuesta por Brad Frost que divide una interfaz en cinco niveles, inspirados en la química.

La idea es construir la UI desde lo más pequeño hasta lo más complejo, fomentando:

  • reutilización

  • consistencia

  • escalabilidad

Los cinco niveles son:

  1. Atoms

  2. Molecules

  3. Organisms

  4. Templates

  5. Pages

Veamos cómo se traducen estos niveles a React y Next.js.


Atomic Design y Next.js: encajan mejor de lo que parece

Next.js ya separa muy bien las responsabilidades:

  • Routing en app/ o pages/

  • Componentes reutilizables en carpetas independientes

  • Layouts bien definidos

Atomic Design complementa esto organizando la UI, no el routing.


Estructura de carpetas recomendada

Una estructura típica usando Next.js App Router podría ser:

src/ ├─ app/ │ ├─ login/ │ │ └─ page.tsx │ ├─ dashboard/ │ │ └─ page.tsx ├─ components/ │ ├─ atoms/ │ ├─ molecules/ │ ├─ organisms/ │ ├─ templates/ ├─ lib/ └─ styles/

Las pages no forman parte de Atomic Design. Atomic Design vive dentro de components/.


Atoms: los bloques básicos

Los atoms son los componentes más pequeños y reutilizables de la interfaz.

En React suelen ser:

  • Button

  • Input

  • Label

  • Icon

  • Text

Ejemplo:

TEXT
1// components/atoms/Button.tsx
2type ButtonProps = {
3  children: React.ReactNode
4  onClick?: () => void
5}
6
7export function Button({ children, onClick }: ButtonProps) {
8  return (
9    <button onClick={onClick} className="btn-primary">
10      {children}
11    </button>
12  )
13}

Buenas prácticas para atoms:

  • Sin acceso a APIs

  • Sin estado complejo

  • Solo reciben props simples

  • No dependen de otros componentes


Molecules: combinando atoms

Las molecules agrupan atoms para cumplir una función concreta.

Ejemplo típico: un campo de formulario.

TEXT
1// components/molecules/FormField.tsx
2import { Input } from "../atoms/Input"
3import { Label } from "../atoms/Label"
4
5type Props = {
6  label: string
7  type: string
8}
9
10export function FormField({ label, type }: Props) {
11  return (
12    <div>
13      <Label text={label} />
14      <Input type={type} />
15    </div>
16  )
17}

Aquí ya existe intención funcional, pero sigue siendo reutilizable.


Organisms: secciones completas de la UI

Los organisms son componentes más grandes que representan secciones completas.

Ejemplos comunes:

  • Header

  • Navbar

  • LoginForm

  • UserCard

  • Footer

TEXT
1// components/organisms/LoginForm.tsx
2import { FormField } from "../molecules/FormField"
3import { Button } from "../atoms/Button"
4
5export function LoginForm() {
6  return (
7    <form>
8      <FormField label="Email" type="email" />
9      <FormField label="Password" type="password" />
10      <Button>Iniciar sesión</Button>
11    </form>
12  )
13}

En este nivel ya suele haber:

  • lógica

  • validaciones

  • estados locales

  • manejo de eventos


Templates: estructura sin datos reales

Los templates definen la estructura de una página, pero sin datos reales.

Son ideales para:

  • dashboards

  • layouts de autenticación

  • estructuras repetibles

TEXT
1// components/templates/DashboardTemplate.tsx
2type Props = {
3  sidebar: React.ReactNode
4  content: React.ReactNode
5}
6
7export function DashboardTemplate({ sidebar, content }: Props) {
8  return (
9    <div className="layout">
10      <aside>{sidebar}</aside>
11      <main>{content}</main>
12    </div>
13  )
14}

Un template define cómo se ve la página, no qué información muestra.


Pages: donde todo se conecta

Las pages viven en app/ y son el último nivel.

Aquí es donde:

  • se cargan datos

  • se usan templates

  • se conectan APIs

  • se maneja el routing

TEXT
1// app/dashboard/page.tsx
2import { DashboardTemplate } from "@/components/templates/DashboardTemplate"
3import { Sidebar } from "@/components/organisms/Sidebar"
4import { Stats } from "@/components/organisms/Stats"
5
6export default function DashboardPage() {
7  return (
8    <DashboardTemplate
9      sidebar={<Sidebar />}
10      content={<Stats />}
11    />
12  )
13}

En Next.js:

  • aquí sí se hace fetch

  • aquí se usan Server Components o Client Components

  • aquí vive la lógica de negocio


Beneficios reales de Atomic Design en Next.js

Aplicado correctamente, Atomic Design te ayuda a:

  • Reutilizar componentes de verdad

  • Mantener consistencia visual

  • Escalar proyectos grandes

  • Reducir duplicación de código

  • Facilitar el trabajo en equipo

Es especialmente útil en:

  • Design Systems

  • Productos a largo plazo

  • Equipos frontend grandes


Errores comunes al usar Atomic Design

  • Forzar todos los componentes a encajar en un nivel

  • Meter lógica compleja en atoms

  • Confundir templates con pages

  • Crear estructuras rígidas difíciles de adaptar

Atomic Design es una guía, no una regla absoluta.


¿Cuándo vale la pena usar Atomic Design?

Sí vale la pena si:

  • El proyecto va a crecer

  • Trabajas en equipo

  • Usas React o Next.js de forma seria

No siempre vale la pena si:

  • Es una landing simple

  • Es un prototipo rápido

  • El proyecto es muy pequeño


Conclusión

Atomic Design en React y Next.js no es obligatorio, pero te obliga a pensar mejor en reutilización, escalabilidad y orden.

Y solo por eso, ya es una herramienta muy valiosa para cualquier frontend developer.

Si quieres ver un ejemplo real aplicado en un proyecto con Next.js, comenta atomic y te comparto el enlace con el repositorio y la explicación completa.