Biblioteca de componentes React-dnd
Ediciones >>>
Edición::Creé un ejemplo en git para mayor claridad https://github.com/suityou01/wgas
EdiciónEdit::Posible duplicado de esta pregunta sin respuesta hace 12 meses
https://stackoverflow.com/questions/65428503/is-there-a-way-to-share-react-context-between-packages
EdiciónEditEdit::Agregué un commit para demostrar el uso de lo que actualmente estoy llamando “React Context Provider Value Chaining”
Ver la captura de pantalla a continuación
Entonces esto está utilizando un contexto de react creado en el paquete de nivel superior, y un contexto anidado en el subpaquete con un valor compartido
const App = () => {
return (
<CustomContext.Provider value={sharedValue}>
<SubCustomContext.Provider value={sharedValue}>
<SamePackageExampleComponent/>
<ExampleComponent />
</SubCustomContext.Provider>
</CustomContext.Provider>
)
}
<<<Ediciones
Estoy tratando de crear una biblioteca de componentes de react que utiliza react-dnd como dependencia en nivel del par.
En mi aplicación que importa la biblioteca y sus componentes, los componentes están envueltos en un proveedor DND.
Cuando lo ejecuto, obtengo
Se esperaba el contexto de arrastrar y soltar
Por lo tanto, es como si no estuviera disponible el contexto proveedor en el componente del paquete.
Funciona si utilizo un componente creado en la aplicación local.
Por lo tanto, la estructura del proyecto se ve como:
package.json (Con react, react-dnd y html5backend como dependencias de desarrollo)
/src/index.js (Esto importa component.js y lo envuelve en un proveedor dnd)
/package/package.json
/package/component.js <-- El contexto no está disponible en este componente
Este es el código en la aplicación:
const App = () => {
return (
<DndProvider backend={HTML5Backend}>
<SortedList data={json} />
</DndProvider>
)
}
Este es el código del componente:
export function SortedListItem(props){
const { data } = props
const [{ opacity }, dragRef] = useDrag(
() => ({
type: "CARD",
item: "1",
collect: (monitor) => ({
opacity: monitor.isDragging() ? 0.5 : 1
})
}),
[]
)
return (
<div ref={dragRef} >
<li>{data.name}</li>
{props.children}
</div>
)
}
Si el componente es parte de mi árbol, ¿por qué no está disponible el contexto si el nivel superior del árbol está envuelto?
davy.ai
Solución para una Biblioteca de Componentes de React con React-DND y React Context
Si estás creando una biblioteca de componentes de React que usa React-DND como una dependencia par, es posible que te encuentres con un problema en el que los componentes envueltos en un proveedor de DND no tienen acceso al contexto creado por la aplicación de nivel superior.
Para resolver este problema, puedes pasar el contexto a través de props al proveedor de DND, y luego a los componentes que lo necesiten.
Aquí tienes un ejemplo:
Al pasar el contexto a través de props al proveedor de DND, y luego al componente, aseguras que el componente tenga acceso al contexto creado por la aplicación de nivel superior.