Измените .scss с помощью кнопки React

Как изменить @import в соответствии с кнопкой значения в React?

Пример того, как я хочу: у меня this.state.modal = false

.js:

handleChangeEvent = () => {
  this.setState({
    modal: !this.state.modal
  })
}
<button onClick = {this.handleChangeEvent}>Test</button>

и мой .scss:

if (this.state.modal === true) {
  @import 'theme/white';
} else {
  @import 'theme/black';
}

конечно, я не могу вызвать, если с .scss, но в основном это то, что я хочу

Добро пожаловать в Stack Overflow, пожалуйста, просмотрите: stackoverflow.com/help/how-to-ask

Daniel 17.12.2018 18:16
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
1
542
3

Ответы 3

Вы можете попробовать что-нибудь, как описано в этой публикации на StackOverflow.

https://stackoverflow.com/a/46543835/2853568

Он возвращает обещание, и результатом разрешения обещания является модуль, который вы условно хотели бы импортировать.

я не могу сделать это с .scss

Daniel Barreto 17.12.2018 18:26

Есть несколько способов создания стилей.

Вы можете добавлять / изменять класс в зависимости от вашего состояния и обрабатывать CSS на основе родительского класса.

<div className = {this.state.modal ? "BlackTheme" : "WhiteTheme" }>
   {rest of your content}
</div>

В вашем scss

.BlackTheme {
   .button {
       background:black;
   }
}


.WhiteTheme {
   .button {
       background:white;
   }
}

Здорово! Спасибо!

Daniel Barreto 17.12.2018 19:37

Есть условный рендеринг для SASS, где вы можете, например, использовать миксин, упомянутый здесь https://stackoverflow.com/a/13879344/7296909 или здесь https://github.com/sass/sass/issues/451#issuecomment-359489037

Однако вы не можете устанавливать какие-либо переменные в SASS с помощью JS. Однако вы можете, как упоминалось в @ eramit2010, устанавливать разные классы в зависимости от значения, например:

const color = this.state.modal === true ? 'white' : 'black';
const className = ´theme ${color}´;

а затем в scss:

%loadFileWhite {
  @import "theme/white";
}

%loadFileBlack {
  @import "theme/black";
}

.theme .white{
    @extend %loadFileWhite;
}

.theme .black{
    @extend %loadFileBlack;
}

Здорово! Спасибо!

Daniel Barreto 17.12.2018 19:38

@DanielBarreto Примите этот ответ как решение, если он сработал!

Jesper 17.12.2018 19:41

Итак ... Я проверил это, но не работает. Когда я передаю цвет, это работает, но не работает с @import

Daniel Barreto 18.12.2018 14:21

Другие вопросы по теме