optimize init method

This commit is contained in:
tangly1024.com
2023-01-20 13:23:54 +08:00
parent 9bc41254ba
commit 01839875f1
3 changed files with 20 additions and 19 deletions

View File

@@ -15,10 +15,17 @@ const GlobalContext = createContext()
*/
export function GlobalContextProvider({ children }) {
const [lang, updateLang] = useState(BLOG.LANG)
const [locale, updateLocale] = useState(generateLocaleDict(lang))
const [locale, updateLocale] = useState(generateLocaleDict(BLOG.LANG))
const [theme, setTheme] = useState(BLOG.THEME)
const [isDarkMode, updateDarkMode] = useState(false)
const [onLoading, changeLoadingState] = useState(false)
const [theme, setTheme] = useState(BLOG.THEME)
useEffect(() => {
initLocale(lang, locale, updateLang, updateLocale)
initDarkMode(isDarkMode, updateDarkMode)
initTheme(theme, changeTheme)
}, [])
Router.events.on('routeChangeStart', (...args) => {
changeLoadingState(true)
})
@@ -43,12 +50,6 @@ export function GlobalContextProvider({ children }) {
saveThemeToCookies(theme)
}
useEffect(() => {
initLocale(lang, locale, updateLang, updateLocale)
initDarkMode(isDarkMode, updateDarkMode)
initTheme(theme, changeTheme)
}, [])
return (
<GlobalContext.Provider value={{ onLoading, changeLoadingState, locale, updateLocale, isDarkMode, updateDarkMode, theme, setTheme, switchTheme, changeTheme }}>
{children}

View File

@@ -49,7 +49,7 @@ export function generateLocaleDict(langString) {
*/
export function initLocale(lang, locale, changeLang, changeLocale) {
if (isBrowser()) {
const queryLang = getQueryVariable('lang') || window.navigator.language
const queryLang = getQueryVariable('lang') || loadLangFromCookies() || window.navigator.language
let currentLang = lang
if (queryLang !== lang) {
currentLang = queryLang
@@ -57,8 +57,8 @@ export function initLocale(lang, locale, changeLang, changeLocale) {
changeLang(currentLang)
saveLangToCookies(currentLang)
const targetLocale = generateLocaleDict(queryLang)
if (JSON.stringify(locale) !== JSON.stringify(targetLocale)) {
const targetLocale = generateLocaleDict(currentLang)
if (JSON.stringify(locale) !== JSON.stringify(currentLang)) {
changeLocale(targetLocale)
}
}

View File

@@ -1,7 +1,7 @@
import cookie from 'react-cookies'
import BLOG from '@/blog.config'
import { ALL_THEME } from '@/themes'
import { getQueryVariable } from './utils'
import { isBrowser, getQueryVariable } from './utils'
/**
* 初始化主题 , 优先级 query > cookies > systemPrefer
@@ -27,14 +27,14 @@ export const initDarkMode = (isDarkMode, updateDarkMode) => {
* @param {*} changeTheme
*/
export const initTheme = (theme, changeTheme) => {
const queryTheme = getQueryVariable('theme')
if (queryTheme && ALL_THEME.indexOf(queryTheme) > -1) {
changeTheme(queryTheme)
} else {
const userTheme = loadThemeFromCookies()
if (userTheme !== theme) {
changeTheme(userTheme)
if (isBrowser()) {
const queryTheme = getQueryVariable('theme') || loadThemeFromCookies() || BLOG.THEME
let currentTheme = theme
if (queryTheme !== theme && ALL_THEME.indexOf(queryTheme) > -1) {
currentTheme = queryTheme
}
changeTheme(currentTheme)
saveThemeToCookies(currentTheme)
}
}