以下是我的 DarkMode.jsx 组件。当我切换按钮时,暗黑模式仅应用于导航栏。网站的其他部分并未改变为暗色主题。请问在使用 Material-UI 的情况下,我应该如何让状态在整个网站中保持更新?
import React, { useState } from 'react';
import { ThemeProvider, createTheme } from "@mui/material/styles";
import CssBaseline from "@mui/material/CssBaseline";
import { Switch } from "@mui/material";
export default function DarkMode() {
// 管理暗黑模式的状态
const [toggleDarkMode, setToggleDarkMode] = useState(true);
// 切换暗黑模式的函数
const toggleDarkTheme = () => {
setToggleDarkMode(!toggleDarkMode);
};
// 应用主色和副色主题配置
const darkTheme = createTheme({
palette: {
mode: toggleDarkMode ? 'dark' : 'light', // 根据切换状态处理暗黑模式
primary: {
main: '#90caf9',
},
secondary: {
main: '#131052',
},
},
});
return (
<ThemeProvider theme={darkTheme}>
<CssBaseline />
<div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>
<h2>切换暗黑模式</h2>
<Switch checked={toggleDarkMode} onChange={toggleDarkTheme} />
</div>
</ThemeProvider>
);
}
我在 Main.jsx 文件中,在 Navbar
组件之后引入了 DarkMode
组件。
import React from 'react'
import ReactDOM from 'react-dom/client'
import './index.css'
// import App from './App'
import Navbar from './Components/components/Navbar';
import Hero from './Components/components/Hero';
import About from './Components/components/About';
import Feature from './Components/components/Feature';
import Card from './Components/components/Card';
import Opensource from './Components/components/Opensource';
import Footer from './Components/components/Footer';
import Workshop from './Components/components/Workshop';
import DarkMode from './Components/components/DarkMode';
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<Navbar />
<DarkMode/>
<Hero />
<Card />
<About />
<Feature />
<Workshop />
<Opensource />
<Footer />
</React.StrictMode>,
)
为了使整个网站在切换暗黑模式时都能应用相应的主题,你需要将 DarkMode
组件提升至一个更高级别的组件,并确保所有子组件都在 ThemeProvider
包裹之下。例如,可以在 Main
组件或一个更高层级的组件中包裹所有的内容:
// 修改后的 Main.jsx 示例
import React from 'react'
import ReactDOM from 'react-dom/client'
import './index.css'
// import App from './App'
import Navbar from './Components/components/Navbar';
import Hero from './Components/components/Hero';
import About from './Components/components/About';
import Feature from './Components/components/Feature';
import Card from './Components/components/Card';
import Opensource from './Components/components/Opensource';
import Footer from './Components/components/Footer';
import Workshop from './Components/components/Workshop';
import DarkMode from './Components/components/DarkMode';
function Main() {
const [toggleDarkMode, setToggleDarkMode] = useState(true);
const darkTheme = createTheme({
// ... 创建主题对象的代码 ...
});
return (
<ThemeProvider theme={darkTheme}>
<Navbar />
<DarkMode toggleDarkMode={toggleDarkMode} setToggleDarkMode={setToggleDarkMode} />
<Hero />
<Card />
<About />
<Feature />
<Workshop />
<Opensource />
<Footer />
</ThemeProvider>
);
}
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<Main />
</React.StrictMode>,
)