Files
MarkLite/src/renderer/hooks/useTheme.ts
T
thzxx 3cecb0f9eb v0.1.1: 多Agent代码质量审查+优化
- fix: useCodeMirror onChange闭包过期导致编辑器内容丢失同步(P0)
- feat: 全部组件添加displayName(React DevTools调试支持)
- feat: 全部组件添加ARIA属性(WCAG无障碍支持)
- fix: App异步操作添加try-catch错误边界
- fix: tabStore空catch块添加错误日志
- fix: sidebarStore Set→string[](Zustand可序列化)
- fix: useDragDrop readFile错误处理+空文件修复
- fix: useSettings/useTheme load()添加错误处理
- fix: useTheme toggleDarkMode引用优化
- chore: 版本号升级至0.1.1
2026-06-03 21:02:56 +08:00

30 lines
1.1 KiB
TypeScript

import { useEffect, useRef } from 'react'
import { useEditorStore } from '../stores/editorStore'
import { settingsRepository } from '../db/settingsRepository'
export function useTheme() {
const darkMode = useEditorStore(s => s.darkMode)
const setDarkMode = useEditorStore(s => s.setDarkMode)
const isInitialized = useRef(false)
// B-05: 从 IndexedDB 加载主题设置
useEffect(() => {
settingsRepository.load().then(settings => {
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
setDarkMode(settings.darkMode !== undefined ? settings.darkMode : prefersDark)
isInitialized.current = true
}).catch(err => console.error('Failed to load theme settings:', err))
}, [setDarkMode])
// B-05: 首次加载完成后才保存主题设置
useEffect(() => {
if (!isInitialized.current) return
document.documentElement.classList.toggle('dark', darkMode)
settingsRepository.save({ darkMode })
}, [darkMode])
const toggleDarkMode = useEditorStore(s => s.toggleDarkMode)
return { darkMode, toggleDarkMode }
}