クラスベースの自分のコンポーネントの一部でテーマを使用したいと思います。何も動作させることができません。ドキュメントのすべての例は機能コンポーネント用です。基本的にテーマは定義されており、それを使用して独自のコンポーネントのスタイルを設定したいので、繰り返しを避け、より高いレベルでコードを変更すると、どこでも変更されます。
私の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);
関連する回答:
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加