[英]React.js Context Provider does not pass provided values to useContext
我正在使用 useContext 掛鈎通過 DOM 傳遞數據,但現在唯一傳遞的數據是來自ImageContext
的初始值。
ImageContextProvider
中的 State images
具有正確的值(第一個初始聲明並更改獲取的數據)。ImageContextProvider
中找到,並沒有更改useContext
掛鈎的 output -> 仍然只是發送了初始上下文值export const ImageContext = createContext({
images: [],
loading: true,
setImages: () => {},
});
const ImageContextProvider = props => {
const [images, setImages] = useState({
images: [],
loading: true
}); // Array instead of object
const fetchData = () => {
imagesServices.loadImages().then((img) => {
setImages({
images: img,
loading: false
})
})
}
useEffect(() => {
fetchData();
}, []);
useDebugValue(images ?? 'loading...')
let value = {images: images.images, loading: images.loading, setImages: setImages}
return(
<ImageContext.Provider value={value}>
{props.children}
</ImageContext.Provider>
);
};
export default ImageContextProvider;
const Visualizer = () => {
return (
<ImageContextProvider>
<Canvas
camera={{position: new THREE.Vector3( 0, 0, -0.5 ), fov: 60}}>
<ambientLight intensity={0.3}/>
<group>
<ImageGroup />
</group>
<OrbitControls enableZoom={false} enablePan={false}/>
</Canvas>
</ImageContextProvider>
);
};
export default Visualizer;
const ImageGroup = (props) => {
const {
roomID = '0',
...restProps
} = props;
const {images, loading, setImages} = useContext(ImageContext);
if (images.loading) return null
return (
<Suspense fallback={null}>
{
images.map((img) =>
(<ImagePlane key={img['imageID']} imgLink={img['imgLink']} position={img['position']} aspectRatio={img['aspect_ratio']}/>)
)
}
</Suspense>
);
};
export default ImageGroup;
我的問題的解決方案是將ImageContextProvider
放在 canvas 中。 這是必要的,因為 canvas 中的元素使用不同的上下文,如下所述: https://github.com/pmndrs/react-three-fiber/blob/master/docs/API/hooks.mdx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.