Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在运行时自定义antd主题?_Javascript_Reactjs_Customization_Antd - Fatal编程技术网

Javascript 如何在运行时自定义antd主题?

Javascript 如何在运行时自定义antd主题?,javascript,reactjs,customization,antd,Javascript,Reactjs,Customization,Antd,我已经和antd一起工作很长时间了。到目前为止,在我的react应用程序中,我已经在网页包配置中定制了antd主题,并更新了默认较少的变量 或者如果我使用createreact应用程序,那么我通过修改config overrides.js中的变量来定制主题 但是现在,我的应用程序中有一个功能,可以有多个主题,用户可以在运行时I-e上选择应用程序的主题,单击我想要更改整个应用程序主题的按钮。这在antd中是如何实现的,因为在它的情况下,所有的定制都是在构建配置中完成的 任何帮助都将不胜感激 这是我

我已经和antd一起工作很长时间了。到目前为止,在我的react应用程序中,我已经在网页包配置中定制了antd主题,并更新了默认较少的变量

或者如果我使用createreact应用程序,那么我通过修改
config overrides.js
中的变量来定制主题

但是现在,我的应用程序中有一个功能,可以有多个主题,用户可以在运行时I-e上选择应用程序的主题,单击我想要更改整个应用程序主题的按钮。这在antd中是如何实现的,因为在它的情况下,所有的定制都是在构建配置中完成的

任何帮助都将不胜感激

这是我看过的文件。但是它没有为我的用例提供任何东西

$ npm install --save antd-theme
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'));

创建一个HOC,作为主题提供者,它从用户选择中选择返回通过AntD主题化的常规应用程序,或者,在用户选择MaterialUI主题的情况下,HOC将
返回
MuiTheme提供者以包装整个应用程序?@SultanH。我已经更新了我的问题,请不要将其与material-ui混用。使用antd,即使使用HOC,主题也不会更改,因为定制是在制作构建的网页配置中完成的。这个配置实际上是在修改antd较少的变量。但是,这不会只影响antd组件吗?是的,但是考虑到我的用例,我不想在材质ui主题和antd主题之间进行选择。我在问题中编辑了这个。基本上,我想在antd主题之间进行选择,以便应用程序支持多个antd主题。所以这个应用程序是用antd构建的,现在我想要有多个主题。