Я новичок в реагировании и создании приложения React с использованием Material-UI (MUI v5) и реализовал маршрутизацию с помощью React Router. Я хочу включить переключатель тем (который присутствует в шаблонах MUI SignUp и SignIn), который позволяет глобально переключаться между светлым, темным и системным режимами. Однако переключатель тем, похоже, не работает должным образом, и когда я пытаюсь это сделать, тема не применяется последовательно на всех страницах.
index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import Home from './Home';
import SignIn from './sign-in/SignIn';
import SignUp from './sign-up/SignUp';
import reportWebVitals from './reportWebVitals';
import {BrowserRouter, Route, Routes} from 'react-router-dom';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
);
reportWebVitals();
import * as React from 'react';
import { useColorScheme } from '@mui/material/styles';
import MenuItem from '@mui/material/MenuItem';
import Select from '@mui/material/Select';
export default function ColorModeSelect(props) {
const { mode, setMode } = useColorScheme();
if (!mode) {
return null;
}
return (
setMode(event.target.value)}
SelectDisplayProps={{
'data-screenshot': 'toggle-mode',
}}
{...props}
>
System
Light
Dark
);
}
Пожалуйста, объясните мне, какие изменения мне нужно внести.
Я пробовал
Обернуть все приложение с помощью ThemeProvider.
Добавление компонента ColorModeSelect к компонентам App и Home.
Я новичок в реагировании и создании приложения React с использованием Material-UI (MUI v5) и реализовал маршрутизацию с помощью React Router. Я хочу включить переключатель тем (который присутствует в шаблонах MUI SignUp и SignIn), который позволяет глобально переключаться между светлым, темным и системным режимами. Однако переключатель тем, похоже, не работает должным образом, и когда я пытаюсь это сделать, тема не применяется последовательно на всех страницах. index.js [code]import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; import Home from './Home'; import SignIn from './sign-in/SignIn'; import SignUp from './sign-up/SignUp'; import reportWebVitals from './reportWebVitals'; import {BrowserRouter, Route, Routes} from 'react-router-dom';
[/code] SignUp.js [code]import * as React from 'react'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import Checkbox from '@mui/material/Checkbox'; import CssBaseline from '@mui/material/CssBaseline'; import Divider from '@mui/material/Divider'; import FormControlLabel from '@mui/material/FormControlLabel'; import FormLabel from '@mui/material/FormLabel'; import FormControl from '@mui/material/FormControl'; import Link from '@mui/material/Link'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; import Stack from '@mui/material/Stack'; import MuiCard from '@mui/material/Card'; import { styled } from '@mui/material/styles'; import AppTheme from '../shared-theme/AppTheme'; import ColorModeSelect from '../shared-theme/ColorModeSelect'; import { GoogleIcon, FacebookIcon } from './CustomIcons';
if (!email.value || !/\S+@\S+\.\S+/.test(email.value)) { setEmailError(true); setEmailErrorMessage('Please enter a valid email address.'); isValid = false; } else { setEmailError(false); setEmailErrorMessage(''); }
if (!password.value || password.value.length < 6) { setPasswordError(true); setPasswordErrorMessage('Password must be at least 6 characters long.'); isValid = false; } else { setPasswordError(false); setPasswordErrorMessage(''); }
if (!name.value || name.value.length < 1) { setNameError(true); setNameErrorMessage('Name is required.'); isValid = false; } else { setNameError(false); setNameErrorMessage(''); }
alert('Sign up with Google')} startIcon={} > Sign up with Google
alert('Sign up with Facebook')} startIcon={} > Sign up with Facebook
Already have an account?{' '}
Sign in
); }
[/code] Я думаю, что переключатель тем взят из компонента colormodeselect, который я прикрепляю сюда, ColorModeSelect.js [code]import * as React from 'react'; import { useColorScheme } from '@mui/material/styles'; import MenuItem from '@mui/material/MenuItem'; import Select from '@mui/material/Select';
export default function ColorModeSelect(props) { const { mode, setMode } = useColorScheme(); if (!mode) { return null; } return ( setMode(event.target.value)} SelectDisplayProps={{ 'data-screenshot': 'toggle-mode', }} {...props} > System Light Dark
); }
[/code] Пожалуйста, объясните мне, какие изменения мне нужно внести. Я пробовал Обернуть все приложение с помощью ThemeProvider. Добавление компонента ColorModeSelect к компонентам App и Home.