【发布时间】:2021-11-08 23:43:06
【问题描述】:
我正在使用 react 构建一个小型 Web 应用程序,并且还包含一个 ThemeSwitcher 组件。该组件包含视觉方面,即切换,以及切换主题的脚本和访问本地存储的脚本。然后 ThemeSwitcher 组件被导入到 Header 组件中,而后者又被导入到 index.js 中
当从深色主题(默认)切换到浅色主题时,此信息将保存到本地存储:
let currentTheme = "dark-theme";
function switchTheme() {
const body = document.querySelector("body");
const transitionChecker = document.querySelector("#theme-selector");
body.classList.add("transition");
body.classList.toggle("light-theme");
transitionChecker.addEventListener("transitionend", () => {
body.classList.remove("transition");
});
currentTheme === "dark-theme"
? (currentTheme = "light-theme")
: (currentTheme = "dark-theme");
localStorage.setItem("storedTheme", currentTheme);
}
我正在使用以下方法在页面加载时访问此值:
window.addEventListener("load", function () {
let storedTheme = localStorage.getItem("storedTheme");
if (storedTheme === "light-theme") switchTheme();
});
这或多或少符合预期。但是,在页面加载时,深色主题会显示片刻,然后切换到浅色主题。
有没有什么方法可以在页面渲染之前抓取想要的主题,避免默认主题闪过?
【问题讨论】: