@mui/joy嵌套Provider中明暗模式切换异常问题咨询
解决Joy-UI嵌套CssVarsProvider时setMode同步修改父级模式的问题
要解决嵌套CssVarsProvider调用setMode同时修改父级模式的问题,核心是让每个Provider拥有独立的存储标识,并在调用setMode时明确指定目标Provider的存储key:
- 为每个嵌套的
CssVarsProvider配置唯一的storageKey,确保它们的模式存储相互隔离 - 调用
setMode时,通过指定modeStorageKey参数,精准作用于目标Provider
修正后的代码示例:
import { CssVarsProvider, useColorScheme } from '@mui/joy/styles'; function ParentSection() { const { setMode: setParentMode } = useColorScheme({ modeStorageKey: 'parent-theme' }); return ( <CssVarsProvider storageKey="parent-theme"> <button onClick={() => setParentMode('light')}>父级切换为浅色</button> <ChildSection /> </CssVarsProvider> ); } function ChildSection() { const { setMode: setChildMode } = useColorScheme({ modeStorageKey: 'child-theme' }); return ( <CssVarsProvider storageKey="child-theme"> <button onClick={() => setChildMode('dark')}>子级切换为深色</button> </CssVarsProvider> ); }
关键说明:
- 仅设置
storageKey但调用setMode时不指定modeStorageKey,会导致setMode使用默认key,依然影响所有同key的Provider disableNestedContext的作用是让子Provider不继承父级的上下文状态,但如果存储key相同,依然会共享本地存储的模式值,因此必须配合独立的storageKey使用
内容的提问来源于stack exchange,提问作者judehall
相关产品推荐
相关产品推荐

