【问题标题】:React: Button does not change its color after Material UI theme changedReact:Material UI主题更改后按钮不会更改其颜色
【发布时间】:2021-01-24 01:18:33
【问题描述】:

我想看到我包含的主按钮的颜色在主题更改时略有变化,但我做不到。

如果我通过删除 'variant="contained"' 将按钮从包含按钮更改为文本按钮,我看到它有效,但我真的想使用包含按钮

有没有办法让它工作?

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(
  // Because of <React.StrictMode>, <CssBaseline /> didn't work when theme was changed.
  // <React.StrictMode>
  //   <App/>
  // </React.StrictMode>,
  <App />,
  document.getElementById('root')
);

App.js

import React, { useState } from 'react';
import './App.css';
import { Button, Container } from '@material-ui/core';
import ChangeTheme from './components/ChangeTheme';
import { lightTheme, darkTheme } from './libs/Theme';
import { MuiThemeProvider, CssBaseline} from '@material-ui/core';


function App() {
  const [theme, setTheme] = useState(darkTheme);

  const handleChangeTheme = (setDark) => {
    setDark === true ? setTheme(darkTheme) : setTheme(lightTheme);
  }

  return (
    <MuiThemeProvider theme={theme}>
      <CssBaseline />
      <Button variant="contained" color="primary">Hi</Button>
    </MuiThemeProvider>
  );
}

export default App;

libs/Theme.js

import { createMuiTheme, responsiveFontSizes } from '@material-ui/core';

export const lightTheme = responsiveFontSizes(
  createMuiTheme({
    palette: {
      type: 'light'
    }
  })
);

export const darkTheme = responsiveFontSizes(
  createMuiTheme({
    palette: {
      type: 'dark'
    }
  })
);

【问题讨论】:

    标签: reactjs material-ui


    【解决方案1】:

    这是因为 Material UI 提供的自动生成的深色主题只会更改调色板中的特定颜色。 不会改变主要/次要背景(primary.mainsecondary.main)颜色。

    从他们的网站上查看this page,该网站列出了由自动生成的深色主题更改的颜色。您会在那里发现文本颜色是主题更改时更改的颜色之一;这就解释了为什么您可以在 variant="text" 按钮中看到更改,但在 variant="contained" 按钮中看不到。

    最好的办法是在主题声明中为深色主题手动指定更改后的颜色。比如:

    export const darkTheme = responsiveFontSizes(
      createMuiTheme({
        palette: {
          type: 'dark',
          primary: {
            main: "#000000" /*or whatever color you desire */
          }
        }
      })
    );
    

    【讨论】:

    • 谢谢@Arjun 的回答。我仍然很困惑。如果palette.type 是'dark',按钮不应该跟随palette.primary.dark 而不是palette.primary.main 的颜色吗?如果不是,那palette.primary.dark 是干什么用的?
    • @JasonKIM palette.primary.dark 确实指定当主题为深色时要使用的颜色。实际上,Material 颜色的每个 main 色调都有 lightdark 变体,可用于在某些 UI 功能中显示对比度:例如,您可以为 AppBar 使用 main 颜色和 dark系统顶部栏的变体。从 Material UI 的网站滚动到 pagePrimary Color 部分。
    • @JasonKIM 简而言之,lightdark 色调与主题完全无关。 Material UI 不会自动更改主要和次要main 颜色。它只会改变文本颜色、纸张背景颜色等内容。希望这会有所帮助!
    • 非常感谢@Arjun。我慢慢明白了。
    • @JasonKIM 如果它解决了您的问题,请考虑通过单击投票下方的勾选标记来接受此答案。谢谢!
    猜你喜欢
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2011-05-22
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 2018-01-12
    相关资源
    最近更新 更多