DEV Community

Aditya
Aditya

Posted on • Originally published at adityanaik.dev on

How to easily set up Material UI theme toggle in React

Scaffold React Application

A new react app is easily scaffolded using


$ npx create-react-app my-app

Enter fullscreen mode Exit fullscreen mode

Install dependencies

I need to install material ui core package.


// with npm

$ npm install @material-ui/core



// with yarn

$ yarn add @material-ui/core

Enter fullscreen mode Exit fullscreen mode

Wrap application in Theme Provider

For the purpose of this demo, I will use App.js to set up everything.

  • Add Light and Dark themes

export const light = {

  palette: {

  type: 'light',

  },

}

export const dark = {

  palette: {

  type: 'dark',

  },

}

Enter fullscreen mode Exit fullscreen mode
  • Import ThemeProvider and createMuiTheme

import { ThemeProvider } from '@material-ui/core'

import { createMuiTheme } from '@material-ui/core/styles'

Enter fullscreen mode Exit fullscreen mode
  • Set up the toggle logic

const [theme, setTheme] = useState(true)

const icon = !theme ? <Brightness7Icon /> : <Brightness3Icon /> 
// Icons imported from `@material-ui/icons`

const appliedTheme = createMuiTheme(theme ? light : dark)

Enter fullscreen mode Exit fullscreen mode
  • Wrap the render inside ThemeProvider and pass the appliedTheme

return (

 <ThemeProvider theme={appliedTheme}>

 //rest of the code

 </ThemeProvider>

)

Enter fullscreen mode Exit fullscreen mode
  • Trigger toggle using onClick

 onClick={() => setTheme(!theme)}

Enter fullscreen mode Exit fullscreen mode

Now our theme toggle logic is in place.

Add rest of the material ui components and see the toggle in action!

You can see a working example here, along with the code.

Top comments (1)

Collapse
 
sachinchaurasiya profile image
Sachin Chaurasiya

Thanks, man!