Форум программистов, компьютерный форум, киберфорум
React/ReactJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
 Аватар для AlexKOR5
50 / 14 / 3
Регистрация: 15.02.2019
Сообщений: 514

Нужна критика кода переключателя темы на React

23.08.2021, 12:05. Показов 5463. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, нужна критика кода переключателя темы.
Что сделано не так, что улучшить?
Принимаю любую критику.

gitHub: https://github.com/Alexander-K... 34ee39d4fe

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import React, {useEffect, useState, useMemo, useCallback} from "react";
import DarkStyles from "../DarkStyles/DarkStyles";
 
export const ThemeSwitcherApp = () => {
    const key = "DARK_THEME";
    const saveJSON = (key, data) => {
        if (window[`localStorage`] === null) return
        return localStorage.setItem(key, JSON.stringify(data));
    };
    const loadJSON = key => {
        if (window[`localStorage`] === null) return
        return key && JSON.parse(localStorage.getItem(key));
    };
 
    const [themeIsActive, setThemeIsActive] = useState(loadJSON(key) ?
        loadJSON(key).darkMode : false);
    const [button_text_value, setButton_text_value] = useState(themeIsActive ? "Turn off" : "Turn on");
 
    const theme_data_false = useMemo(() => ({darkMode: false}), []);
    const theme_data_true = useMemo(() => ({darkMode: true}), []);
 
    const insertDarkStyles = (where) => {
        const style = document.createElement(`style`);
        style.setAttribute(`id`, `dark-mode`);
        style.innerHTML = DarkStyles;
        where.append(style);
    };
 
    const ActiveDarkTheme = useCallback(
        () => {
            insertDarkStyles(document.getElementsByTagName(`head`)[0]);
            setButton_text_value("Turn off");
            saveJSON(key, theme_data_true);
        }, [theme_data_true]
    )
    const DeactivateDarkTheme = useCallback(
        () => {
            const isDarkModeExist = !!document.getElementById(`dark-mode`);
            if (isDarkModeExist) {
                document.getElementById(`dark-mode`).remove();
                setButton_text_value("Turn on");
                saveJSON(key, theme_data_false);
            }
        }, [theme_data_false]
    )
 
    const ThemeStorageLoading = useCallback(
        (key, data) => {
            if (!localStorage.getItem(key)) {
                saveJSON(key, data);
            } else {
                if (loadJSON(key).darkMode) {
                    ActiveDarkTheme();
                } else {
                    DeactivateDarkTheme();
                }
            }
        }, [ActiveDarkTheme, DeactivateDarkTheme]);
 
    useEffect(() => { // Once Loading
        ThemeStorageLoading(key, theme_data_false);
    }, [theme_data_false, ThemeStorageLoading]);
 
    const ButtonAction = (bool_value) => {
        setThemeIsActive(bool_value);
        if (bool_value) ActiveDarkTheme();
        else DeactivateDarkTheme();
    };
 
    return (
        <div>
            <input type="button"
                   onClick={() => ButtonAction(!themeIsActive)}
                   defaultValue={button_text_value}
                   style={{cursor: "pointer"}}
            />
        </div>
    );
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.08.2021, 12:05
Ответы с готовыми решениями:

Нужна критика кода "React, Redux"
Здравствуйте, нужна критика кода &quot;React, Redux&quot;. Правильно ли всё сделано? Еще нет почему то рендеринга компонента...

Нужна критика кода
Хочу услышать замечания и предложения по коду, может у кого-то есть идеи как в данном коде можно побольше использовать делегат,лямбд,...

Нужна критика кода (Интересует безопасность передачи данных)
Здравствуйте, нужна критика кода (Интересует безопасность передачи данных). Всё ли сделано нормально в плане безопасности? Если нет...

21
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
06.09.2021, 09:27
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от AlexKOR5 Посмотреть сообщение
Работать на прямую с дом вообще не рекомендуется в React?
ну у Reacta же виртуальный DOM, он синхронизируется с реальным DOM при изменении виртуального.

Ну разве что менять в исключительных случаях.

Добавлено через 4 минуты
AlexKOR5, Вообще логика компонентов должна зависеть от входящих данных, меняются входящие данные -> перерисовывается компонент.

Контекст нужен для того, чтобы не передавать пропсы через все дерево компонентов.
То есть конечный компонент все равно зависит от пропсов, но этот пропс глобальный и выдергиваешь этот пропс немного по другому.
1
 Аватар для AlexKOR5
50 / 14 / 3
Регистрация: 15.02.2019
Сообщений: 514
06.09.2021, 18:37  [ТС]
Цитата Сообщение от Iverycool Посмотреть сообщение
Всю сложную логику лучше выносить из компонента: в отдельный файл в виде сервиса, либо, если, например, она зависит от состояния/пропсов компонента - в кастомный хук.
Что такое сервис в данном контексте?


Цитата Сообщение от Iverycool Посмотреть сообщение
То, что дальше Вы разделяете на, как минимум, 4 файла, можно лаконично описать в одном)
Эта цитата противоречит следующей вашей.
Цитата Сообщение от Iverycool Посмотреть сообщение
Всю сложную логику лучше выносить из компонента: в отдельный файл
Объясняю почему четыре файла:
Ovederax сказал
манипуляции с local-storage вынести в отдельный файл утилит
обозвать разумно
Как следствие сделал первый файл.
Второй и третий это разделение о котором вы мне сказали.
Ну и четвертый это мое 'произведения искусства'. Так что же разделять, а что оставить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.09.2021, 18:37

Почти готовый морской бой (нужна критика кода)
Морской бой 1. код разделён на два пакета logic и swing 2. правильно ли я манипулирую данными: получаю, передаю, изменяю. ? 3. не...

Нужна конструктивная критика: советы, замечания по заданному фрагменту кода
Есть входные данные, которые я кладу в вектор 5 1 2 3 4 5 Ваша критика #include &lt;iostream&gt; #include &lt;vector&gt;

Нужна конструктивная критика по оформлению и читабельности кода (Game Trainer C++)
Относительно недавно начал изучать C++. Для обучения решил написать трейнер попутно изучая язык/читая необходимую литературу разного рода. ...

Как построить логику переключателя темы сайта (dark, white)?
Здравствуйте, подскажите как сделать это, чтобы при повторном заходе пользователя на этот сайт тема которую он выбрал сохранялась. Как...

Нужна критика
Добрый день, сразу скажу что критику на счет дизайна можете оставить при себе сам все знаю.&lt;br&gt;Сайт старый, никак в топ не попадают....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru