reactjs - 切换主题的 ReactJs 自定义钩子
问题描述
您好,我想就我的自定义钩子寻求帮助我无法以将主题放在单个文件中的方式构建它
我需要在我的钩子和我的组件中导入我的主题我已经尝试了一切但我无法解决它,基本上我需要将主题首选项保存在本地存储中并且默认主题是轻的
代码:
import { darkTheme, lightTheme } from './themes/index';
export default function App() {
const [theme, setTheme] = usePersistedState('theme');
const toggleTheme = () => {
setTheme(theme.type === 'light' ? darkTheme : lightTheme);
};
return (
<ThemeProvider theme={theme}>
<GlobalStyle />
<div className="App">
<button onClick={toggleTheme}>a</button>
</div>
</ThemeProvider>
);
我的钩子:
function usePersistedState(key) {
const [state, setState] = useState(() => {
const storageValue = JSON.parse(localStorage.getItem(key));
console.log(storageValue);
switch (storageValue) {
case 'dark':
return darkTheme;
case 'light':
return lightTheme;
default:
return lightTheme;
}
});
useEffect(() => {
localStorage.setItem(key, JSON.stringify(state.type));
}, [key, state]);
return [state, setState];
}
解决方案
推荐阅读
- r - 在R中选择空单元格
- node.js - 如何获得 Sequelize 结果 WHERE MAX timestamps_of_multiple_nested_objects 大于某个日期?
- r - 如何找到 OPENDAP URL(NetCDF 文件)的正确 MIME 内容类型?
- python - fastapi 提取所有路径参数键和值
- arrays - 如何将列表框中的项目写入数组 VBA
- python - 为什么我的“before_tag”函数不是由“behave”执行的
- python - 如何仅在找到字符串后读取excel数据但不使用skirows
- mongoose - NestJS Mongoose - 无法确定类型错误:无法确定类型
- .net - 从 bitbucket 到 Azure Web App 的部署失败。访问被拒绝错误
- arrays - Google 表格仅根据电子邮件域过滤掉电子邮件