GreaterGlider
@GreaterGlider

Как сделать switcher темы CSS в React приложении?

Добрый всем день!

Есть две таблицы стилей, условно светлая тема и темная тема. Написал компонент который по клику подгружает .css файл:

class StyleSwitcher extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
            checked: false,
        }
        this.handleOnClick = this.handleOnClick.bind(this);
    }

    handleOnClick(event) {
        this.setState({checked: !this.state.checked});

        if (!this.state.checked) {
            import('./light.css')
        } else {
            import('./dark.css')
        }
    }

    render() {
        return (
            <Fragment>
                <input type="checkbox" onClick={this.handleOnClick}/>
            </Fragment>
        )
    }
}


При клике стили меняются на светлый, но при повторном не хочет меняться на темный. Вопрос как реализовать подобное поведение? И как правильней всего работать с динамическими изменяемыми стилями в реакте?

Важное дополнение: должно работать в IE хотя бы 11 версии.
  • Вопрос задан
  • 971 просмотр
Пригласить эксперта
Ответы на вопрос 1
mannaro
@mannaro
Умею профессионально гуглить
Так у вас просто подключаются стили и не удаляются. Делайте по старинке через createElement('style'), а потом удаляйте его при переключении стилей.

UPD 13 мая 2019: вообще, в реакте сейчас принято передавать тему откуда-то сверху (например, с помощью контекста) и реализовывать стиль на уровне компонента. Подгрузка CSS напрямую выглядит как какой-то лютый костыль.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы