Elevar el estado
Un campo de texto está al lado de una vista previa que necesita mostrar lo que se haya escrito. Ambos viven en el mismo árbol de componentes, pero el estado declarado dentro de un componente es invisible para sus vecinos, así que ni el input ni la vista previa pueden leer o cambiar lo que el otro contiene. La solución es mover ese estado hacia el componente padre más cercano que ambos comparten, y luego pasar el valor hacia abajo a cada uno como prop. Esto se llama elevar el estado.
Aquí está ese par, compartiendo un valor:
import { useState } from 'react'
function Form() {
const [text, setText] = useState('')
return (
<>
<TextInput text={text} onChange={setText} />
<TextDisplay text={text} />
</>
)
}
function TextInput({ text, onChange }) {
return <input value={text} onChange={e => onChange(e.target.value)} />
}
function TextDisplay({ text }) {
return <p>Escribiste: {text}</p>
}Form es el padre común más cercano de TextInput y TextDisplay, así que ahí es donde vive text. Pasa text hacia abajo a ambos, y pasa setText hacia abajo a TextInput con el nombre onChange. Cuando alguien escribe, TextInput llama a onChange con el nuevo valor, el estado de Form se actualiza, y Form se re-renderiza. Ese re-render envía el nuevo text hacia abajo a ambos hijos, así que TextDisplay muestra exactamente lo que hay en el input sin mantener ningún estado propio.
Mantén el estado lo más bajo posible
Elevar el estado es una maniobra que haces solo cuando la necesitas. La regla guía es la colocación de estado: mantén cada pieza de estado lo más bajo en el árbol que pueda estar, cerca del componente que realmente la usa, y elévala solo cuando algo más necesita leerla o cambiarla también. Un componente con estado que nadie más toca debe mantener ese estado para sí mismo.
Esto importa porque elevar tiene un costo. Cada nivel que una pieza de estado sube, el padre tiene que pasarla hacia abajo de nuevo como prop, y cada componente en el medio tiene que aceptar y reenviar esa prop incluso si nunca usa el valor. Empieza en lo local. Sube el estado solo hasta el componente más cercano que realmente necesita compartirlo, no más lejos.
Pasar el setter hacia abajo
Nota que Form no solo pasa text hacia abajo. También pasa setText hacia abajo, como la prop onChange. Esta es la otra mitad de elevar el estado: el componente que es dueño del estado ofrece una forma de cambiarlo vía props, y el hijo llama a esa función en lugar de manejar el valor él mismo. TextInput nunca ve setText directamente. Llama a la función que le dieron, y el padre decide qué es lo que esa función realmente hace.
Para estado que se comparte entre componentes anidados muchos niveles aparte, pasar props hacia abajo a través de cada capa deja de ser práctico. React tiene herramientas para ese caso, Context entre ellas, y el capítulo Hooks cubre useContext, el hook que lee un valor sin llevarlo a través de cada componente en el medio. Eso está fuera del alcance de este capítulo; el patrón de arriba es el que debes usar primero.
Siguiente: Effects, donde usarás useEffect para manejar trabajo que sucede fuera del renderizado.

