React-admin provides the useTheme hook to read and update the theme preference (light or dark) programmatically. It uses the same syntax as React’s useState. Its used internally by the <ToggleThemeButton> component.

import { defaultTheme, useTheme } from 'react-admin';
import { Button } from '@mui/material';

const ThemeToggler = () => {
    const [theme, setTheme] = useTheme();

    return (
        <Button onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}>
            {theme === 'dark' ? 'Switch to light theme' : 'Switch to dark theme'}

Tip: Don’t confuse react-admin’s useTheme with Material-UI’s useTheme. The latter is used to read the material-ui theme, while the former is used to read and update the user theme preference.