React18+Antd5.6.3框架配置主题颜色和主题切换以及跟随系统切换主题(二)

系统切换主题

使用媒体查询matchMedia()来获取操作系统配色。

matchMedia('(prefers-color-scheme: dark)').matches)
import {Button, ConfigProvider, Space, Switch, theme} from "antd";
import {useState} from "react";
function App({
  //darkMode判断是否出去暗黑模式
  const [darkMode, setDarkMode] = useState(
      localStorage.getItem('darkMode') === 'true'||
      (localStorage.getItem('darkMode') !== 'false' && matchMedia('(prefers-color-scheme: dark)').matches)
  );
  return (
    <div style={{ background:darkMode ? 'black': 'white', height: 'calc(100vh - 40px)', padding: '20px' }}>
        <ConfigProvider theme={{algorithm:darkMode ? theme.darkAlgorithm :theme.defaultAlgorithm}}>
            <Space wrap>
                <Switch
                    checked={darkMode}
                    checkedChildren="暗黑模式"
                    unCheckedChildren="浅色模式"
                    onChange={() =>
 {
                        localStorage.setItem('darkMode',String(!darkMode));
                        setDarkMode(!darkMode)
                    }}
                />
                <Button type="primary">Primary Button</Button>
                <Button>Default Button</Button>
                <Button type="dashed">Dashed Button</Button>
                <Button type="text">Text Button</Button>
                <Button type="link">Link Button</Button>
            </Space>
        </ConfigProvider>

    </div>

  )
}

export default App

如果本地存储中的darkMode为“深色”,或者本地存储中的darkMode不是“浅色”且操作系统配色方案首选项为深色,则 darkMode 将设置为 true。

当我们切换主题时,darkMode会被更新。

现在我们存起来的是状态darkMode,是true或者是false。React18+Antd5.6.3框架配置主题颜色和主题切换以及跟随系统切换主题(二)这里我们可以优化一下,将特定的主题名称也存起来。

import {Button, ConfigProvider, Space, Switch, theme} from "antd";
import {useState} from "react";
function App({
  //darkMode判断是否出去暗黑模式
  const [darkMode, setDarkMode] = useState(
      localStorage.getItem('theme') === 'dark'||
      (localStorage.getItem('theme') !== 'light' && matchMedia('(prefers-color-scheme: dark)').matches)
  );
  return (
    <div style={{ background:darkMode ? 'black': 'white', height: 'calc(100vh - 40px)', padding: '20px' }}>
        <ConfigProvider theme={{algorithm:darkMode ? theme.darkAlgorithm :theme.defaultAlgorithm}}>
            <Space wrap>
                <Switch
                    checked={darkMode}
                    checkedChildren="暗黑模式"
                    unCheckedChildren="浅色模式"
                    onChange={() =>
 {
                        localStorage.setItem('theme',darkMode?'light':'dark');
                        setDarkMode(!darkMode)
                    }}
                />
                <Button type="primary">Primary Button</Button>
                <Button>Default Button</Button>
                <Button type="dashed">Dashed Button</Button>
                <Button type="text">Text Button</Button>
                <Button type="link">Link Button</Button>
            </Space>
        </ConfigProvider>

    </div>

  )
}

export default App

现在我们就将主题也存起来啦React18+Antd5.6.3框架配置主题颜色和主题切换以及跟随系统切换主题(二)

昨天的文章漏发了一些,今日补上,希望能对小伙伴们有所帮助,晚安啦!!


原文始发于微信公众号(大前端编程教学):React18+Antd5.6.3框架配置主题颜色和主题切换以及跟随系统切换主题(二)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/224030.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!