DEV Community

Adriana
Adriana

Posted on

Redux vs. React Context en Vite: ¿Pizza o Tacos para tu estado global?

Tacos o pizza

¿Alguna vez has estado en un restaurante y no sabes si pedir pizza o tacos? Redux y React Context son eso mismo en el mundo de React: dos formas de manejar el estado de tu app, pero con sus propios sabores.

1. ¿Qué es React Context? (El "taco simple") 🌮

Imagina que tienes que pasar un plato de comida (tus datos) desde la cocina (componente padre) hasta el comensal (componente hijo). En lugar de gritar por toda la casa, usas React Context, que es como un mesero que lleva la información directo a donde la necesitas.

Cómo usarlo en Vite

Crea el contexto:

El contexto es un sistema para compartir datos entre componentes sin tener que pasarlos manualmente como props en cada nivel.

// ThemeContext.jsx
import { createContext, useState } from 'react';

export const TacoContext = createContext();

export function TacoProvider({ children }) {
  const [tacoType, setTacoType] = useState('pastor'); // estado inicial
  return (
    <TacoContext.Provider value={{ tacoType, setTacoType }}>
      {children}
    </TacoContext.Provider>
  );
}
Enter fullscreen mode Exit fullscreen mode

Envuelve tu app (en main.jsx):

Esto sirve para que todos tus componentes puedan ver el contexto y acceder a sus datos.

import { TacoProvider } from './context/TacoContext';

ReactDOM.createRoot(document.getElementById('root')).render(
  <TacoProvider>
    <App />
  </TacoProvider>
);
Enter fullscreen mode Exit fullscreen mode

Consume el contexto donde lo necesites:

import { useContext } from 'react';
import { TacoContext } from './context/TacoContext';

function Comensal() {
  const { tacoType, setTacoType } = useContext(TacoContext);
  return <h1>¡Quiero un taco de {tacoType}!</h1>;
}
Enter fullscreen mode Exit fullscreen mode

Usa React Context para:

Pequeñas apps (como tu portfolio)

Implementar tema claro/oscuro

Cuando no quieres instalar dependencias adicionales

2. ¿Qué es Redux? (La "pizza familiar con 20 ingredientes") 🍕

Redux es como el sistema de pedidos de un gran restaurante: tiene cocineros (reducers), tickets de pedido (actions) y un lugar centralizado donde guardar todo (store). Es más complejo, pero escala mejor cuando tu app es enorme.

Para usarlo con Vite:

Instala Redux Toolkit:

La versión moderna y simplificada que reduce el código repetitivo de Redux puro:

npm install @reduxjs/toolkit react-redux
Enter fullscreen mode Exit fullscreen mode

Crea un "slice":

Un slice es una porción del estado global + sus reglas de actualización.

// pizzaSlice.js
import { createSlice } from '@reduxjs/toolkit';

const pizzaSlice = createSlice({
  name: 'pizza',
  initialState: { flavor: 'pepperoni' },
  reducers: {
    changeFlavor: (state, action) => {
      state.flavor = action.payload;
    },
  },
});

export const { changeFlavor } = pizzaSlice.actions;
export default pizzaSlice.reducer;
Enter fullscreen mode Exit fullscreen mode

Configura el store (en store.js):

import { configureStore } from '@reduxjs/toolkit';
import pizzaReducer from './pizzaSlice';

export const store = configureStore({
  reducer: {
    pizza: pizzaReducer,
  },
});
Enter fullscreen mode Exit fullscreen mode

Envuelve tu app (en main.jsx):

import { Provider } from 'react-redux';
import { store } from './store';

ReactDOM.createRoot(document.getElementById('root')).render(
  <Provider store={store}>
    <App />
  </Provider>
);
Enter fullscreen mode Exit fullscreen mode

Usa Redux en tus componentes:

import { useSelector, useDispatch } from 'react-redux';
import { changeFlavor } from './pizzaSlice';

function Cliente() {
  const flavor = useSelector((state) => state.pizza.flavor);
  const dispatch = useDispatch();

  return (
    <button onClick={() => dispatch(changeFlavor('hawaiana'))}>
      Cambiar a pizza {flavor}
    </button>
  );
}
Enter fullscreen mode Exit fullscreen mode

Conclusión: ¿Cuándo usar cada uno?

React Context es como un taco al pastor: rápido y sencillo.

Redux es la pizza familiar: más preparación, pero alimenta a todos.

¿Con cuál te quedas? ¡Déjame saber en los comentarios! 👇

Top comments (0)