【问题标题】:Ant Design: How to Switch light or dark theme in production?Ant Design:如何在生产中切换浅色或深色主题?
【发布时间】:2020-05-24 06:14:43
【问题描述】:

如何在 create-react-app 生产环境中动态切换 Ant Design 的深色主题和浅色主题?

【问题讨论】:

    标签: antd


    【解决方案1】:

    app.jsx

    import { Button, Select } from 'antd';
    import { ThemeProvider, useTheme } from 'antd-theme';
    import React from 'react';
    import ReactDOM from 'react-dom';
    import { SketchPicker } from 'react-color';
    
    const initialTheme = {
      name: 'default',
      variables: { 'primary-color': '#00ff00' },
    };
    
    const ThemeSelect = () => {
      const [{ name, variables, themes }, setTheme] = useTheme();
    
      return (
        <>
          <Select
            style={{ width: 100 }}
            value={name}
            onChange={
              (theme) => setTheme({ name: theme, variables })
            }
          >
            {
              themes.map(
                ({ name }) => (
                  <Select.Option key={name} value={name}>
                    {name}
                  </Select.Option>
                )
              )
            }
          </Select>
          <SketchPicker
            color={variables['primary-color']}
            onChange={(value) => {
              // Will update all css attributes affected by primary-color
              setTheme({ name, variables: { 'primary-color': value.hex } });
            }}
          />
        </>
      );
    };
    
    const App = () => {
      const [theme, setTheme] = React.useState(initialTheme);
      return (
        <ThemeProvider
          theme={theme}
          onChange={(value) => setTheme(value)}
        >
          <ThemeSelect />
          <Button type="primary">Button</Button>
        </ThemeProvider>
      );
    };
    
    ReactDOM.render(<App />, document.getElementById('root'));
    

    config-overrides.js

    const { override, fixBabelImports, addLessLoader, addPostcssPlugins, adjustStyleLoaders, addWebpackPlugin } = require('customize-cra');
    
    const AntdThemePlugin = require('antd-theme/plugin');
    
    module.exports = override(
      fixBabelImports('import', {
        libraryName: 'antd',
        libraryDirectory: 'es',
        style: true,
      }),
      addLessLoader({
        javascriptEnabled: true,
      }),
      adjustStyleLoaders(
        (loaders) => {
          loaders.use[0] = {
            loader: AntdThemePlugin.loader
          }
        }
      ),
      addWebpackPlugin(
        new AntdThemePlugin({
          themes: [
            {
              name: 'dark',
              filename: require.resolve('antd/lib/style/themes/dark.less'),
            },
            {
              name: 'compact',
              filename: require.resolve('antd/lib/style/themes/compact.less'),
            },
          ],
        })
      ),
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多