reactjs - Material UI Switch 切换有错误并且不能正确更改
问题描述
我创建了一个简单的 React 项目,我在应用程序的抽屉中插入了一个 Material UI 开关,该开关将应用程序的主题从黑暗切换到明亮。问题是有时当我加载应用程序并单击开关时,前几次它没有响应。当我继续点击时,它会改变主题,但行为会被翻转:我进行切换的方式是在黑暗模式下检查/打开开关,在亮起时关闭,但现在,在没有响应之后前几次,它会改变行为,当它是轻模式时它会打开,反之亦然。
我切换开关的方式是这样的:
我使用的状态:
const [isDark, setDarkMode] = React.useState(true);
const [theme, setTheme] = React.useState(darkTheme);
切换主题功能:
const toggleTheme = () => {
setDarkMode((prev) => !prev);
setTheme(isDark ? darkTheme : lightTheme);
};
这是我的开关:
<Switch edge="start" checked={isDark} onChange={toggleTheme} />
编辑:如果我这样做,这个问题仍然存在:
setTheme((prev) => prev === darkTheme? lightTheme: darkTheme);
结果:(行为仍然翻转)
代码:
我的 CodeSandbox 链接:https ://codesandbox.io/s/testing-karmapact-app-bghgp?file=/App.js
解决方案
您需要反转主题切换setTheme(isDark ? darkTheme : lightTheme);
如果当前是深色主题,那么您想要将它们设置为浅色,反之亦然。
const toggleTheme = () => {
setDarkMode((prev) => !prev);
setTheme(isDark ? lightTheme : darkTheme);
};
推荐阅读
- c - C中的运算符优先级(指针算术)
- hl7-fhir - Hapi Fhir DomainResource,您使用什么 URL?
- java - 通过 Eclipse 从 Java(FX) 创建 Windows EXE
- javascript - 对象数组。反应.js
- linkedin - 在 2019 年使用 LinkedIn API
- python-3.x - Python HTTP Client GET issue with port
- sql-server - 优化 SQL 查询 Select on Select Case
- java - 如何正确实现二进制搜索算法来猜测 Java 中的随机 BigInteger?
- python - Django ManyToManyField between 2 objects that point to one another
- c++ - 在 C++11 中具有对齐元素的 std::array 类型