1- import React from 'react' ;
2- import { ThemeProvider } from 'styled-components' ;
3- import { theme } from './styles/Theme' ;
4- import GlobalStyles from './styles/GlobalStyles' ;
1+ import React , { useState , useEffect , useContext } from 'react' ;
52import Header from './components/Header' ;
63import Hero from './components/Hero' ;
74import Features from './components/Features' ;
@@ -10,22 +7,72 @@ import Installation from './components/Installation';
107import TypescriptSupport from './components/TypescriptSupport' ;
118import Community from './components/Community' ;
129import Footer from './components/Footer' ;
10+ import { ThemeProvider } from 'styled-components' ;
11+ import { lightTheme , darkTheme } from './styles/Theme' ;
12+ import GlobalStyles from './styles/GlobalStyles' ;
13+
14+ // 创建主题上下文
15+ export const ThemeContext = React . createContext ( {
16+ isDarkMode : true ,
17+ toggleTheme : ( ) => { } ,
18+ } ) ;
19+
20+ // 提供一个钩子函数用于获取主题上下文
21+ export const useTheme = ( ) => useContext ( ThemeContext ) ;
1322
1423const App : React . FC = ( ) => {
24+ // 主题状态
25+ const [ isDarkMode , setIsDarkMode ] = useState ( true ) ;
26+
27+ // 切换主题函数
28+ const toggleTheme = ( ) => {
29+ setIsDarkMode ( ! isDarkMode ) ;
30+ localStorage . setItem ( 'darkMode' , ( ! isDarkMode ) . toString ( ) ) ;
31+ } ;
32+
33+ // 从本地存储获取主题设置
34+ useEffect ( ( ) => {
35+ const savedDarkMode = localStorage . getItem ( 'darkMode' ) ;
36+ if ( savedDarkMode !== null ) {
37+ setIsDarkMode ( savedDarkMode === 'true' ) ;
38+ } else {
39+ // 如果没有保存过设置,则检查系统偏好
40+ const prefersDarkMode = window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ;
41+ setIsDarkMode ( prefersDarkMode ) ;
42+ }
43+ } , [ ] ) ;
44+
45+ useEffect ( ( ) => {
46+ // 更新页面滚动位置
47+ window . scrollTo ( 0 , 0 ) ;
48+
49+ // 监听浏览器历史变化
50+ const handlePopState = ( ) => {
51+ // 移除与 currentPage 相关的逻辑
52+ window . scrollTo ( 0 , 0 ) ;
53+ } ;
54+
55+ window . addEventListener ( 'popstate' , handlePopState ) ;
56+ return ( ) => window . removeEventListener ( 'popstate' , handlePopState ) ;
57+ } , [ ] ) ;
58+
1559 return (
16- < ThemeProvider theme = { theme } >
17- < GlobalStyles />
18- < Header />
19- < main >
20- < Hero />
21- < Features />
22- < WorkflowDemo />
23- < Installation />
24- < TypescriptSupport />
25- < Community />
26- </ main >
27- < Footer />
28- </ ThemeProvider >
60+ < ThemeContext . Provider value = { { isDarkMode, toggleTheme } } >
61+ < ThemeProvider theme = { isDarkMode ? darkTheme : lightTheme } >
62+ < GlobalStyles />
63+
64+ < div >
65+ < Header />
66+ < Hero />
67+ < Features />
68+ < WorkflowDemo />
69+ < Installation />
70+ < TypescriptSupport />
71+ < Community />
72+ < Footer />
73+ </ div >
74+ </ ThemeProvider >
75+ </ ThemeContext . Provider >
2976 ) ;
3077} ;
3178
0 commit comments