当前位置: 首页 > 面试题库 >

如何在自定义类组件的样式中使用主题

申高卓
2023-03-14
问题内容

我想在基于类的我自己的组件的某些部分中使用主题。我什么都做不了,文档中的所有示例都是针对功能组件的。基本上,主题是定义好的,我想用它来设置自己的组件样式,这样我就可以避免重复自己并在更高级别上更改代码,并且该代码随处可见。

我的App.js

import { ThemeProvider } from '@material-ui/styles';
import { createMuiTheme } from '@material-ui/core/styles';

const theme = createMuiTheme({
    palette: {
        primary: {
            light: '#757ce8',
            main: '#3f50b5',
            dark: '#002884',
            contrastText: '#fff',
          },
    },
    overrides: {
        MuiOutlinedInput: {
            disabled: true,
            input: {
                color: 'red'
            }
        }
    }
});

export default class App extends React.Component {
    render() {
        return (
            <ThemeProvider theme={theme}>
                <Nav />
            </ThemeProvider>
        );
    }
}

我的问题文件Nav.js

import React from 'react';
import SearchBar from './SearchBar';
import { makeStyles } from '@material-ui/styles';

const styles = makeStyles(theme => ({
    root: {
        background: theme.background,
    },
  }));

class Nav extends React.Component {
    render() {
        const classes = styles();
        return(
            <div className={classes.root}>
                <SearchBar />
            </div>
        )
    }
}

export default Nav;

问题答案:

您不能makeStyles与类组件一起使用。makeStyles返回一个只能在功能组件中使用的自定义钩子。对于类组件,可以使用withStyles来利用所有相同的功能。withStyles包装您的组件并注入classes道具。

下面是一个基于您的问题代码的工作示例:

import React from "react";

import { withStyles } from "@material-ui/core/styles";

class SearchBar extends React.Component {
  render() {
    return <div>My Search Bar</div>;
  }
}

const styles = theme => ({
  root: {
    backgroundColor: theme.palette.primary.main,
    color: theme.palette.primary.contrastText
  }
});

class Nav extends React.Component {
  render() {
    return (
      <div className={this.props.classes.root}>
        <SearchBar />
      </div>
    );
  }
}
export default withStyles(styles)(Nav);



 类似资料:
  • 在我的应用程序中,我使用了主题。全息和主题。全息。光没有任何问题。当全息主题被使用,我点击一个对话首选项/列表首选项,弹出的对话框也是全息主题。全息也一样。光。但是当首选项活动与我的自定义主题,这是从全息派生。光,所有对话都以全息为主题。光。我想我错过了一些东西在我的主题。有人能帮帮我吗?非常感谢! 这是我的主题代码:

  • 我正忙于重构React项目以使用样式化组件。它目前正在使用SASS。所以,我有一个工作组件: 每个Li组件都从附加一个类的父组件导入一个prop。例如,第一个列表项将在单击时缩进该列表项,并取消缩进所有其他列表项。这都保持在父状态。到目前为止一切都好。现在,这个缩进类在一个scss文件中定义: 我不想让那个scss文件隐藏那个缩进类。它应该在我的Main NavDiv组件中的某个地方定义,这样我就

  • 如何自定义Video组件控制栏样式

  • 问题内容: 在和中使用时,我在大纲自定义样式方面取得了成功。 否则- 仅存在底边框-即使使用中的键/类也不起作用。 我什至试过了。 问题答案: 为了确定如何执行此操作,请查看Input中如何完成默认样式是有帮助的。 用于默认样式和悬停样式,并用于焦点样式。 这是一个如何设置样式的示例:

  • 我是wordpress的新手。谁能给我推荐wordpress教程,帮助我从头定制一个主题,以及如何在该主题中创建模板文件。我在谷歌上搜索过,但没有找到好的教程。 提前感谢

  • 出于性能考虑,HTML 中不允许使用内联 style,所有样式只能放到 <head> 的 <style mip-custom> 标签里。 正确方式: <head> <style mip-custom> p { color: #00f;} </style> </head> <body> <p>Hello World!</p> </body> 错误方式: <!-- 禁止使用 sty