CodeForge

React 19 de Cero a Experto / Estado

Lifting state up: compartir estado entre componentes

Teoría20 min20 XP

A menudo dos componentes necesitan el MISMO estado: un input que agrega y una lista que muestra, un filtro y los resultados que filtra. Como las props solo fluyen hacia abajo, la solución es subir el estado al ancestro común de ambos —el patrón "lifting state up"—. Es la forma en que React coordina componentes, y entenderlo bien es entender cómo se estructura una app entera.

El termostato compartido de la casa

El problema: estado duplicado se descoordina

Si un input tiene su estado y una lista tiene el suyo, no pueden coordinarse: el input no puede agregar a la lista del otro. La solución es que el PADRE tenga el estado, y se lo pase a ambos:

Fíjate en el reparto: el PADRE (App) es el dueño del estado gastos. Agregar no tiene la lista —solo llama onAgregar cuando el usuario envía (evento hacia arriba)—. Lista no tiene la lista tampoco —la recibe por props (datos hacia abajo)—. El padre coordina a ambos: cuando Agregar avisa, el padre actualiza el estado, y Lista se re-renderiza con los nuevos datos. Los dos hijos comparten un estado que ninguno posee.

El procedimiento de lifting

La otra cara: no subas de más

Lifting es la respuesta cuando el estado se COMPARTE. Pero no subas TODO al tope por costumbre:

Un componente <Buscador> tiene el texto de búsqueda en su estado, y un componente hermano <Resultados> necesita ese texto para filtrar. Pero Resultados no puede acceder al estado de Buscador. ¿Cuál es la solución?

Mini-reto

Coordina dos componentes: 1) un <Slider> (input range) y un <Precio> que muestra un valor calculado con ese slider; 2) sube el estado del slider al padre y pásalo a ambos; 3) agrega un <Resumen> que también lea ese valor. Comprueba que mover el slider actualiza los tres, porque comparten una fuente de verdad en el padre. Siente cómo el ancestro común coordina.

Qué sigue

Con useState y lifting manejas la mayoría del estado. Pero cuando la lógica se complica —muchas acciones que cambian el estado de formas distintas—, hay una herramienta más ordenada: useReducer. Y te va a sonar muchísimo, porque es EXACTAMENTE el reducer con acciones discriminadas que construiste en el supercurso de TypeScript.