reactjs - 在 makeStyles 中使用自定义主题

标签 reactjs material-ui

我做了一些研究,但未能找到解决方案。

我正在尝试使用 createMuiTheme 创建一个主题,并稍后在 makeStyles 中使用它来检索内部的键。 (示例中的调色板)但是,自定义主题似乎没有在 makeStyles 中应用。

import React from 'react';
import ReactDOM from 'react-dom';
import { makeStyles, createMuiTheme, ThemeProvider } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
import red from "@material-ui/core/colors/red";

const useStyles = makeStyles(theme => {
  console.log(theme); // Only defaults but not red in palette.
  return {
    root: {
      color: theme.palette.primary[400] // This is not working.
    }
  };
});

function App() {
  const classes = useStyles();
  const theme = createMuiTheme({
    palette: {
      primary: red
    }
  });
  return (
    <ThemeProvider theme={theme}>
      <Button className={classes.root}>Hook</Button>
    </ThemeProvider>
  );
}

但是在另一个使用 useTheme 的组件中它可以正常工作。我做错了什么?

const useStyles = makeStyles(theme => {
  console.log(theme); // Here palette includes the new palette.
  return {
    root: {
      color: theme.palette.primary[400]
    }
  };
});

function anotherApp() {
  const classes = useStyles();
  const theme = useTheme(); 
  ...
}

最佳答案

您的自定义主题应用于此行:<ThemeProvider theme={theme}> ,并且在此之前调用您的 makeStyles 函数。
这意味着,在这一行 const classes = useStyles();您调用您的makeStyles功能,但您的主题仍然是默认主题。
解决方案就是您已经做过的,创建一个 CustomizedButton并在其中调用 useStyles Hook 。

关于reactjs - 在 makeStyles 中使用自定义主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59464618/

相关文章:

javascript - 如何从多个 API 调用设置状态?

javascript - 如何使用 onClick() 过滤 React Bootstrap 卡片

javascript - 调色板中的 MUI 自定义命名选项 - 类型 'primary' 上不存在属性 'TypeBackground'

javascript - 通过 API PUT 删除换行符将文本区域保存到数据库

javascript - 方法响应超时

javascript - 仅允许在 Material ui 中达到一定长度的数字

reactjs - Material-UI:如何使用 TextField 应用输入属性

javascript - Textfields组件编号验证React js

reactjs - 防止 Material ui 中的行单击和对话框的事件传播

reactjs - 如何设置没有iconElementLeft的App bar组件?