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

配置主题颜色

ConfigProvider为Ant Design组件提供统一的配置支持。从5.0版本开始,增加了对原色、边框半径、边框颜色等主题的支持,可以动态切换主题、支持多个主题、为部分组件自定义主题变量等等。

ConfigProvider 中配置主题

//App.tsx
import {Button, ConfigProvider, Space} from "antd";
function App({
  return (
    <div style={{ background: 'white', height: 'calc(100vh - 40px)', padding: '20px' }}>
        <ConfigProvider theme={{token:{colorPrimary:'#00b96b'}
        }}>

            <Space wrap>
                <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框架配置主题颜色和主题切换以及跟随系统切换主题

ConfigProvider设置暗模式

通过修改算法可以快速生成风格迥异的主题,5.0 版本中默认提供三套预设算法,分别是默认算法 theme.defaultAlgorithm、暗色算法 theme.darkAlgorithm 和紧凑算法 theme.compactAlgorithm

我们将背景设置为黑色,将主题算法设置为theme.darkAlgorithm

import {Button, ConfigProvider, Space, theme} from "antd";
function App({
  return (
    <div style={{ background: 'black', height: 'calc(100vh - 40px)', padding: '20px' }}>
        <ConfigProvider theme={{algorithm:theme.darkAlgorithm}}>
            <Space wrap>
                <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框架配置主题颜色和主题切换以及跟随系统切换主题

切换深色和浅色主题

import {Button, ConfigProvider, Space, Switch, theme} from "antd";
import {useState} from "react";
function App({
  //darkMode判断是否出去暗黑模式
  const [darkMode, setDarkMode] = useState(false);
  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={() =>
 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

以上代码,在组件内部使用了 React 的 useState 钩子来创建一个状态 darkMode,并使用 setDarkMode 函数来更新该状态。初始状态为 false,表示浅色模式。

<Switch> 组件用于切换暗黑模式和浅色模式,根据 darkMode 的值来显示不同的文本。

效果:浅色模式:React18+Antd5.6.3框架配置主题颜色和主题切换以及跟随系统切换主题暗黑模式:React18+Antd5.6.3框架配置主题颜色和主题切换以及跟随系统切换主题

主题持久化

可以使用localStorage来存储设置的主题。

import {Button, ConfigProvider, Space, Switch, theme} from "antd";
import {useState} from "react";
function App({
  //darkMode判断是否出去暗黑模式
  const [darkMode, setDarkMode] = useState(localStorage.getItem('darkMode') === 'true');
  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>
            {/*</Routes>*/}
        </ConfigProvider>


    </div>
  )
}

export default App

没到切换主题时,主题状态都会存储到本地。

以上就是今日分享的文章,希望对小伙伴们有所帮助,晚安啦!


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

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

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

(0)
小半的头像小半

相关推荐

发表回复

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