前提・実現したいこと
React(TypeScript)× Ruby on RailsでWebアプリケーションを開発しています。
やりたいこととして、各ユーザーごとにボタンや背景などの色を変えたい(例:ユーザーAには赤色、ユーザーBには青色など)です。
そこで、material UIのthemeTemplateのpaletteで色を一括管理し、ユーザーごとに変数で出し分けたいです。
しかし、useStyleでclassを設定したものが実際には反映されません。直接color="primary"とすると反映されます。
発生している問題・エラーメッセージ
themeTemplate.tsx
React
1import * as React from "react" 2import { createMuiTheme } from "@material-ui/core/styles" 3import { ThemeProvider } from "@material-ui/styles" 4 5const theme = createMuiTheme({ 6 palette: { 7 primary: { 8 main: "#ffcccb", //後ほどにここは変数にする 9 }, 10 }, 11}) 12 13type Props = { 14 children: React.ReactNode 15} 16 17const ThemeTemplate: React.FC<Props> = ({ children }: Props) => { 18 return ( 19 <ThemeProvider theme={theme}> 20 <CssBaseline /> 21 {children} 22 </ThemeProvider> 23 ) 24} 25 26export default ThemeTemplate 27
index.tsx
React
1import { 2 makeStyles, 3 createStyles, 4 Theme, 5 withStyles, 6 useTheme, 7 WithStyles, 8} from "@material-ui/core/styles" 9import ThemeTemplate from "../../layouts/ThemeTemplate" 10 11(省略) 12 13const useStyles = makeStyles((theme: Theme) => 14 createStyles({ 15 button: { 16 backgroundColor: theme.palette.primary.main, //これが違う? 17 }, 18 }) 19) 20 21 22const hogehoge: React.FC<Props> = (props: Props) => { 23const classes = useStyles() 24const theme = useTheme() 25 26return ( 27 <ThemeTemplate> 28 <Button color="primary" > 29これは色が反映される 30 </Button> 31 32 <Button className={classes.button}> 33これは反映されずMaterial UIのデフォルトのcolorになる 34 </Button> 35 36 </ThemeTemplate> 37 ) 38} 39 40
試したこと
関連する記事などが見つけられませんでした。
const useStyles = makeStyles((theme: ThemeTemplate) =>
としてみたところエラーになりました。
ふと思ったのですが、theme:Theme
で読み込んでいる元のTheme
はMaterial UIのデフォルトのもの(import {theme} from @material-ui
)から読み込んでいるので、themeTemplate.tsx
で設定したものは反映されないのでは??と思いました。。。
補足情報(FW/ツールのバージョンなど)
また、className="button"
で当てた箇所は、"#3f51b5"になっており、これは以下のMaterialUIのpalette→primary→mainのhex codeと一致します。そのため、MaterialUIのデフォルトの色が指定はできているものの、アプリケーション内のthemeTemplate.tsx
で指定した内容が無視されているということになります。
Material UIのDefault Theme
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/01 16:08
2021/08/01 16:33
2021/08/02 00:23
2021/08/02 00:29
2021/08/02 00:30
2021/08/05 14:47
2021/08/05 14:54
2021/08/05 15:34