Попытка объединить пользовательские параметры темы с параметрами по умолчанию, чтобы мой пользовательский компонент использовал мою тему без использования оболочки ThemeProvider.
Новый материал-ui / styles / withStyles (mui v4-alpha) имеет дополнительную опцию defaultTheme
, которая перезаписывается переданной единицей, я пытаюсь сбросить defaultTheme
на myTheme
, но не повезло. Пожалуйста, помогите мне достичь этого.
Это то, что я сейчас пытаюсь.
import React from 'react'
import Button from '@material-ui/core/Button'
import { createMuiTheme } from '@material-ui/core/styles'
import { withStyles } from '@material-ui/styles'
const styles = (theme) => {
// here i'm getting myTheme with red palette.primary.main
console.log(theme)
return {}
}
export const MyButton = (props) => <Button {...props}/>
// reset primary color to red, so MyButton primary will be always red.
// Here i mean much more complex extend with props and overrides keys (not only palette)
const myTheme = createMuiTheme({
palette: {
primary: {
main: '#ff0000',
}
}
})
export default withStyles(styles, {defaultTheme: myTheme})(MyButton)
Но в итоге мой MyButton
по-прежнему использует синий цвет mui по умолчанию в качестве основного. Что я делаю не так? Заранее спасибо!
P.S. Если я заверну <Button...
в <ThemeProvider theme={myTheme}><Button...
, все хорошо, красная кнопка.
------------------ edit # 1 ------------------
Похоже, мой код не работает по следующей причине.
Базовое ядро по умолчанию Button
Сам компонент использует ту же функцию withStyles без опции defaultTheme (опция только name) export default withStyles(styles, { name: 'MuiButton' })(Button);
. Означает, что Button
сама будет использовать тему по умолчанию import defaultTheme from './defaultTheme';
(withStyle.js).
Это означает, что я могу использовать опцию DefaultTheme со стилем для своих собственных компонентов, но не для существующего ядра один раз.
Тогда у меня есть еще один вопрос ...
Можно ли применить myTheme (расширение defaultTheme) к базовому компоненту mui по умолчанию? (хочу просто импортировать myButton
куда-то еще без использования ThemeProvider, аналогично тому, как я импортирую основные компоненты)