Loading

Ant Design Pro中手动切换黑暗主题

生产环境中取消显示SettingDrawer

虽然Ant Design Pro内置了SettingDrawer, 上面有切换主题的功能

Ant Design Pro

这个SettingDrawer在文档里说只在开发模式下出现, 但是我用的这个版本打包部署到生产环境仍然会显示, 需要/src/app.tsx 中添加下面这一行让它只在开发环境中出现

img

好, 进入正题

Ant Design Pro实现手动切换黑暗模式

AntDesignPro没有提供动态切换的接口, 那么我们就要自己实现一下

自带的SettingDrawer中的黑暗主题是用 darkreader 来实现的

ProComponent的源码中可以找到切换的实现方式


AntDesignPro没有提供这个函数的调用接口, 既然有现成的, 那我们直接复制这个函数到自己的项目中用

然后Ctrl C+V一下, 这个方法就是我的了😎

image

之后在项目文件夹/src/components/RightContent/index.tsx 中添加黑暗模式的切换开关

img

这里添加一个Switch组件, 开关的效果是这样的
img
img

要实现记住用户所选的主题的话, 就需要把当前主题储存下来, 这里用浏览器的LocalStorage来储存

/** 省略 **/
const GlobalHeaderRight: React.FC = () => {
	/** 省略 **/

	const switchDarkMode = () => {
	//点击开关触发主题的切换
	  localStorage.setItem("darkMode", darkMode ? "0" : "1");
	  darkMode = !darkMode;
		updateDarkMode(darkMode); //这里是调用上面复制的updataTheme方法
	};
	//设置一个darkMode变量, 来切换开关的状态
	let darkMode = localStorage.getItem("darkMode") == "1";
	//更新一下黑暗模式的状态
	updateDarkMode(darkMode);

	/** 省略 **/
	return (
		/** 省略 **/
    
		//开关组件在这定义
		<Switch checkedChildren="🌜" unCheckedChildren="🌞" onClick={switchDarkMode} defaultChecked={darkMode} size={"small"}></Switch>
	);
	/** 省略 **/
};
export default GlobalHeaderRight;
posted @ 2023-02-03 13:45  マルシル  阅读(1472)  评论(5编辑  收藏  举报