【发布时间】:2020-02-15 19:37:51
【问题描述】:
您好,我有一个自定义挂钩来定义我的主题
代码:
export default function App() {
const [theme, setTheme] = usePersistedState('light');
const toggleTheme = () => {
setTheme(theme.type === 'light' ? 'dark' : 'light');
};
return (
<ThemeProvider theme={theme}>
<GlobalStyle />
<div className="App">
<button onClick={toggleTheme}>a</button>
</div>
</ThemeProvider>
);
这是我的钩子:
import { darkTheme, lightTheme } from '../themes/index';
function usePersistedState(key) {
const [state, setState] = useState(() => {
switch (key) {
case 'dark':
return darkTheme;
case 'light':
return lightTheme;
default:
return lightTheme;
}
});
console.log(state);
useEffect(() => {
localStorage.setItem(key, JSON.stringify(state.type));
}, [key, state]);
return [state, setState];
}
export default usePersistedState;
基本上每次我的状态发生变化时,我都会将它保存到本地存储中,但由于某种原因,它只能在第一次使用
当我第二次尝试更改主题时,我没有进入我的开关
编辑:
当我第一次在 gif 中显示我得到一个对象时,因为我输入了我的开关,但是当我尝试更改主题时,我只得到一个文本,因为我没有输入我的开关
【问题讨论】:
标签: reactjs material-ui react-hooks