diff --git a/lib/global.js b/lib/global.js index b469d501..6dd44e93 100644 --- a/lib/global.js +++ b/lib/global.js @@ -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 ( {children} diff --git a/lib/lang.js b/lib/lang.js index 718367d7..49b0b831 100644 --- a/lib/lang.js +++ b/lib/lang.js @@ -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) } } diff --git a/lib/theme.js b/lib/theme.js index 4575bc9c..61314289 100644 --- a/lib/theme.js +++ b/lib/theme.js @@ -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) } }