У меня возникла странная проблема с реакцией. Мой компонент должен отображать 1 из 2 разных значков на основе логического значения isDarkMode. Однако по какой-то причине значки не меняются, хотя логическое значение меняется. Они изменяются только при первоначальной визуализации сайта, и это все.
Я немного озадачен тем, что я сделал не так, любая помощь приветствуется.
"use client"
import React, { useEffect, useState } from 'react'
import { HiOutlineMoon, HiOutlineSun } from 'react-icons/hi'
export default function Switcher({ className, navbar }: { className?: string, navbar?: boolean }) {
const [isDarkMode, setIsDarkMode] = useState(false);
useEffect(() => {
const savedTheme = localStorage.getItem('theme');
const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
if (savedTheme === 'dark' || (!savedTheme && systemPrefersDark)) {
document.documentElement.classList.add('dark');
document.documentElement.classList.remove('light');
setIsDarkMode(true);
} else {
document.documentElement.classList.add('light');
document.documentElement.classList.remove('dark');
setIsDarkMode(false);
}
}, [])
function changeMode(mode: 'mode' | 'layout', event: React.SyntheticEvent): void {
if (mode === 'mode') {
if (document.documentElement.className.includes("dark")) {
document.documentElement.classList.add('light');
document.documentElement.classList.remove('dark');
localStorage.setItem('theme', 'light');
setIsDarkMode(false);
} else {
document.documentElement.classList.add('dark');
document.documentElement.classList.remove('light');
localStorage.setItem('theme', 'dark');
setIsDarkMode(true);
}
}
}
useEffect(() => {
console.log("dark mode is: " + isDarkMode);
if (isDarkMode) {
console.log("Should show sun icon");
} else {
console.log("Should show moon icon");
}
}, [isDarkMode])
return (
{
console.log('Checkbox toggled. Current isDarkMode:', isDarkMode);
changeMode('mode', event)
}}
aria-label="Toggle dark mode"
/>
{isDarkMode ? (
) : (
)}
)
};```
Подробнее здесь: https://stackoverflow.com/questions/797 ... te-toggles
Значок React не обновляется при переключении состояния isDarkMode ⇐ Javascript
Форум по Javascript
-
Anonymous
1761418156
Anonymous
У меня возникла странная проблема с реакцией. Мой компонент должен отображать 1 из 2 разных значков на основе логического значения isDarkMode. Однако по какой-то причине значки не меняются, хотя логическое значение меняется. Они изменяются только при первоначальной визуализации сайта, и это все.
Я немного озадачен тем, что я сделал не так, любая помощь приветствуется.
"use client"
import React, { useEffect, useState } from 'react'
import { HiOutlineMoon, HiOutlineSun } from 'react-icons/hi'
export default function Switcher({ className, navbar }: { className?: string, navbar?: boolean }) {
const [isDarkMode, setIsDarkMode] = useState(false);
useEffect(() => {
const savedTheme = localStorage.getItem('theme');
const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
if (savedTheme === 'dark' || (!savedTheme && systemPrefersDark)) {
document.documentElement.classList.add('dark');
document.documentElement.classList.remove('light');
setIsDarkMode(true);
} else {
document.documentElement.classList.add('light');
document.documentElement.classList.remove('dark');
setIsDarkMode(false);
}
}, [])
function changeMode(mode: 'mode' | 'layout', event: React.SyntheticEvent): void {
if (mode === 'mode') {
if (document.documentElement.className.includes("dark")) {
document.documentElement.classList.add('light');
document.documentElement.classList.remove('dark');
localStorage.setItem('theme', 'light');
setIsDarkMode(false);
} else {
document.documentElement.classList.add('dark');
document.documentElement.classList.remove('light');
localStorage.setItem('theme', 'dark');
setIsDarkMode(true);
}
}
}
useEffect(() => {
console.log("dark mode is: " + isDarkMode);
if (isDarkMode) {
console.log("Should show sun icon");
} else {
console.log("Should show moon icon");
}
}, [isDarkMode])
return (
{
console.log('Checkbox toggled. Current isDarkMode:', isDarkMode);
changeMode('mode', event)
}}
aria-label="Toggle dark mode"
/>
{isDarkMode ? (
) : (
)}
)
};```
Подробнее здесь: [url]https://stackoverflow.com/questions/79799688/react-icon-not-updating-when-isdarkmode-state-toggles[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия