現在、これは私がしているもので、コンポーネントファイルを上にThemeProvider
を渡します。
import React from 'react';
import { ThemeProvider, createMuiTheme } from '@material-ui/core/styles';
import MUIButton from '@material-ui/core/Button';
const theme = createMuiTheme({
palette: {
primary: {
main: "#ff0000"
}
},
typography: {
fontFamily: 'Nunito Sans, sans-serif',
button: {
textTransform: 'none'
}
},
shape: {
borderRadius: 3
}
})
export default ({ variant, children }) => {
return (
<ThemeProvider theme={theme}>
<MUIButton
color="primary"
variant={variant}
>
{children}
</MUIButton>
</ThemeProvider>
)
}
_
ストーリーブックのグローバルレベルでこれをできることを理解しようとしています。これは私がButton
と呼ばれる最初のコンポーネントです。そのため、外部ファイルにテーマを持つことができ、ThemeProvider
がより高いレベルに入ってくるので、各コンポーネントをラップする必要はありません。それが理にかなっていることを願って、誰かがいかなるアイデアを持っているならば。
まず、テーマを別のファイルに移動することをお勧めします(src/stylesheet
など、さまざまなファイル(グローバルApp
コンポーネント、ストーリーブックのプレビューファイル)からアクセスできます。
// src/stylesheet.ts
import { createMuiTheme } from '@material-ui/core/styles';
export const muiTheme = createMuiTheme({
palette: {
primary: {
main: "#ff0000"
}
},
typography: {
fontFamily: 'Nunito Sans, sans-serif',
button: {
textTransform: 'none'
}
},
shape: {
borderRadius: 3
}
})
次に、Reactアプリを設定したのと同じ方法でストーリーブックを設定する必要があります。これを行うには、.storybook/preview.js
というファイルを作成してください。
// .storybook/preview.js
import React from 'react';
import { addDecorator } from '@storybook/react';
import { ThemeProvider } from '@material-ui/core/styles';
import { muiTheme } from '../src/stylesheet';
addDecorator((story) => (
<ThemeProvider theme={muiTheme}>{story()}</ThemeProvider>
));
それはThemeProvider
の中にすべてのあなたの物語を包みます。
あなたのアプリでは、App
内のアプリ全体をカプセル化するグローバルThemeProvider
コンポーネントを持つこともできます。
もっとヘルプ: https://storybook.js.org/docs/basics/wwrity-stories/