Переключение цветовой темы в react

Нужно сделать переключение тем (светлая/темная), чтобы при переключении данные вносились в redux и cookie. Вот мой код:

При загрузке приложения происходит инициализация. Если файла cookie еще нет, он создается (light):

export const initializeApp = () => (dispatch) => {
    if (!getCookie('theme')) {
        dispatch(toggleTheme('light'));
    } else {
        dispatch(toggleTheme(getCookie('theme')));
    }
}

Функция toggleTheme:

export const toggleTheme = (theme) => {
    setCookie('theme', theme);
    return ({ type: TOGGLE_THEME, payload: { theme } });
}

reducer:

let initialState = {
    initialized: false,
    theme: null
};

const appReducer = (state = initialState, action) => {
    switch (action.type) {
        case TOGGLE_THEME:
            return {
                ...state,
                theme: action.payload.theme
            }
        default:
            return state;
    }
}

компонента:

const ThemeToggler = (props) => {
    const dispatch = useDispatch()
    const onToggleTheme = () => {
        if (getCookie('theme') === 'light') {
            dispatch(props.toggleTheme('dark'));
        } else if (getCookie('theme') === 'dark') {
            dispatch(props.toggleTheme('light'));
        }
    }

    return (
        <label id={s.switch} className={s.switch}>
            <input type={'checkbox'} onChange={onToggleTheme} id={s.slider} />
            <span className={cn(s.slider, s.round)}></span>
        </label>
    )
}

Функции getCookie, setCookie:

import Cookie from 'js-cookie';

const getCookie = (cookieKey) => {
    return Cookie.get(cookieKey);
};


import Cookie from 'js-cookie';

const setCookie = (cookieKey, cookieValue) => {
    Cookie.set(cookieKey, cookieValue, {
        path: '/'
    });
};

Проблема в том, что после первого переключения cookie не меняется. Т.е. при загрузке устанавливается начальное значение, можно 1 раз нажать на кнопку - работает, а потом нет. Надеюсь на Вашу помощь.


Ответы (0 шт):