Para explicar la situación. Tengo un componente secundario que tiene un cheurón que gira con un clic. Necesito implementar datos de accesorios de niño a padre y abuelo.
<ChildComponent> <ParentComponent> <GrandParentComponent>Dentro de ChildComponent tengo un icono de flecha (img)
const [rotateIcon, setRotateIcon] = useState(false); const expandAttachment = useCallback(() => { setRotateIcon(!rotateIcon); }, [rotateIcon]); <img src="assets/arrow" transform={rotateIcon ? 'rotate(90deg)' : 'rotate(0)'} >Y esto es trabajo, pero... Necesito apoyar el estado del icono de rotación al componente GrandParentComponent .
No es sólo el niño para el padre. De niño a padre y de padre otro nivel hasta. Abuelo.
¿Cómo puedo hacer eso? ¿Es esta una buena manera? ¿Cuáles son mis alternativas? ¡No uso redux en el sistema, sino contexto api!
Para ser claro. Los tres componentes están conectados. ¡Cada uno de cada uno es un padre hijo!
Puede realizar perforaciones de utilería , es decir, agregar un estado al <GrandParentComponent/> y pasarlo como utilería a los componentes secundarios.
abuelo
export default GrandParentComponent(){ const [rotateIcon, setRotateIcon] = useState(false); // pass the state and setState down to the children return <ParentComponent rotateIcon={rotateIcon} setRotateIcon={setRotateIcon}/> }padre
export default ParentComponent({rotateIcon, setRotateIcon}){ // pass props to child component again return <ChildComponent rotateIcon={rotateIcon} setRotateIcon={setRotateIcon}/> }niño
export default ChildComponent({rotateIcon, setRotateIcon}){ const expandAttachment = useCallback(() => { setRotateIcon(!rotateIcon); }, [rotateIcon]); <img src="assets/arrow" transform={rotateIcon ? 'rotate(90deg)' : 'rotate(0)'} > }No hay nada intrínsecamente malo en la perforación de apoyo, pero se vuelve más difícil administrar el estado de la aplicación a medida que aumenta la complejidad.
Para evitar esto, usamos React Context o Redux. React Context está integrado en React, por lo que es muy ligero y potente al mismo tiempo. Es perfecto para una situación como la tuya.
Para que la respuesta sea breve, lea cómo implementar React Context y useContext hook aquí .
almacene el estado en GrandParentComponent y pase entre los componentes como un accesorio para llegar a ChildComponent . Los accesorios están destinados a pasar de un componente principal a uno o más componentes secundarios .
Como yo lo veo tienes 3 opciones:
Sin embargo, uso y recomiendo usar redux para operaciones complejas como esta. Cuando comprende la idea detrás de redux, se vuelve muy fácil de usar.