refactor: Extract StyleSheetManager into a separate context component

- Move StyleSheetManager logic from App.tsx to a new dedicated context component
- Simplify App.tsx by importing the new StyleSheetManager
- Preserve existing prop validation and filtering logic
This commit is contained in:
kangfenmao 2025-03-02 19:51:20 +08:00
parent 3bc8dfdf8c
commit 84e6caa846
2 changed files with 28 additions and 12 deletions

View File

@ -1,15 +1,14 @@
import '@renderer/databases' import '@renderer/databases'
import isPropValid from '@emotion/is-prop-valid'
import store, { persistor } from '@renderer/store' import store, { persistor } from '@renderer/store'
import { Provider } from 'react-redux' import { Provider } from 'react-redux'
import { HashRouter, Route, Routes } from 'react-router-dom' import { HashRouter, Route, Routes } from 'react-router-dom'
import { PersistGate } from 'redux-persist/integration/react' import { PersistGate } from 'redux-persist/integration/react'
import { StyleSheetManager } from 'styled-components'
import Sidebar from './components/app/Sidebar' import Sidebar from './components/app/Sidebar'
import TopViewContainer from './components/TopView' import TopViewContainer from './components/TopView'
import AntdProvider from './context/AntdProvider' import AntdProvider from './context/AntdProvider'
import StyleSheetManager from './context/StyleSheetManager'
import { SyntaxHighlighterProvider } from './context/SyntaxHighlighterProvider' import { SyntaxHighlighterProvider } from './context/SyntaxHighlighterProvider'
import { ThemeProvider } from './context/ThemeProvider' import { ThemeProvider } from './context/ThemeProvider'
import NavigationHandler from './handler/NavigationHandler' import NavigationHandler from './handler/NavigationHandler'
@ -21,18 +20,11 @@ import KnowledgePage from './pages/knowledge/KnowledgePage'
import PaintingsPage from './pages/paintings/PaintingsPage' import PaintingsPage from './pages/paintings/PaintingsPage'
import SettingsPage from './pages/settings/SettingsPage' import SettingsPage from './pages/settings/SettingsPage'
import TranslatePage from './pages/translate/TranslatePage' import TranslatePage from './pages/translate/TranslatePage'
function App(): JSX.Element { function App(): JSX.Element {
return ( return (
<Provider store={store}> <Provider store={store}>
<StyleSheetManager <StyleSheetManager>
shouldForwardProp={(prop, element) => {
// 对于 HTML 元素,使用 isPropValid 检查
if (typeof element === 'string') {
return isPropValid(prop)
}
// 对于自定义组件,允许所有非特殊属性通过
return prop !== '$' && !prop.startsWith('$')
}}>
<ThemeProvider> <ThemeProvider>
<AntdProvider> <AntdProvider>
<SyntaxHighlighterProvider> <SyntaxHighlighterProvider>
@ -40,7 +32,6 @@ function App(): JSX.Element {
<TopViewContainer> <TopViewContainer>
<HashRouter> <HashRouter>
<NavigationHandler /> <NavigationHandler />
{/* 添加导航处理组件 */}
<Sidebar /> <Sidebar />
<Routes> <Routes>
<Route path="/" element={<HomePage />} /> <Route path="/" element={<HomePage />} />

View File

@ -0,0 +1,25 @@
import isPropValid from '@emotion/is-prop-valid'
import { ReactNode } from 'react'
import { StyleSheetManager as StyledComponentsStyleSheetManager } from 'styled-components'
interface StyleSheetManagerProps {
children: ReactNode
}
const StyleSheetManager = ({ children }: StyleSheetManagerProps): JSX.Element => {
return (
<StyledComponentsStyleSheetManager
shouldForwardProp={(prop, element) => {
// 对于 HTML 元素,使用 isPropValid 检查
if (typeof element === 'string') {
return isPropValid(prop)
}
// 对于自定义组件,允许所有非特殊属性通过
return prop !== '$' && !prop.startsWith('$')
}}>
{children}
</StyledComponentsStyleSheetManager>
)
}
export default StyleSheetManager