menu
announcement

Spectrum is now read-only. Learn more about the decision in our official announcement.

Material-UI

⚠️ Our spectrum channel is now disabled, use StackOverflow instead

Channels
Team

MuiThemeProvider vs ThemeProvider

February 21, 2019 at 3:31pm
The Material-UI community has a new home. This thread is preserved for historical purposes. The content of this conversation may be innaccurrate or out of date. Go to new community home →

MuiThemeProvider vs ThemeProvider

February 21, 2019 at 3:31pm
Hello. I am a newbie for Material UI. I am wondering what is the best practice to use both theme providers. As I understand, I have to supply a theme to MuiThemeProvider to apply the theme to framework's components like Button, Card, etc. And I have to supply a theme to ThemeProvider in order to have it available when I create custom components
I am doing this in my project
const theme = createMuiTheme({
typography: {
useNextVariants: true
}
});
ReactDOM.render(
<MuiThemeProvider theme={theme}>
<ThemeProvider theme={theme}>
<App />
</ThemeProvider>
</MuiThemeProvider>,
document.getElementById('root')
);
Is it correct to pass the same theme object to both providers?

February 21, 2019 at 4:10pm
If I'm not mistaken you either use MuiThemeProvider if you're using the "old" withStyles HOC. If you're using the new makeStyles hook you should use the ThemeProvider. If you're using ThemeProvider don't forget to run install() at the root of your app. So it depends on which theming method you want to use, though there is no harm in passing it to both providers (afaik).
Edited
Thanks for your reply. Without MuiThemeProvider, how can I customize the overall look of the app? For example, the palette. The code below doesn't turn my app into blue. Using MuiThemeProvider, it does
const theme = createMuiTheme({
palette: {
primary: blue
}
});
const App = () => (
<ThemeProvider theme={theme}>
<CssBaseline />
<Home />
</ThemeProvider>
);
Edited
Did you call install() as noted?
Edited
Oh, sorry. I really missed that part. Now, my code is like this
const muiTheme = createMuiTheme({
palette: {
primary: blue
}
});
const theme = {
...muiTheme
// custom styles
};
ReactDOM.render(
<ThemeProvider theme={theme}>
<CssBaseline />
<App />
</ThemeProvider>,
document.getElementById('root')
);
Happy that I only need one provider. Anyway, createMuiTheme is still required to provide default theme. Is this kind of function available in /styles?
Nope afaik you should still use createMuiTheme from the core package for now!
Thank you This thing is in my head all day. It is cleared now :D
like-fill
1

February 22, 2019 at 5:54pm
can you link me to info about the install() func? I'm looking in the docs and don't see anything about that
sure, there's not much about it for the moment though since it's part of the alpha styling system - here
Thanks - I should have read this guide more carefully when I started my greenfield 4.0.0 project
Show more messages