Вложенность CSS-селекторов в материал-пользовательский интерфейс?

#reactjs #material-ui #css-in-js #makestyles

Вопрос:

Я не могу понять, как сделать самую простую вещь в CSS, используя стили создания из материала-пользовательского интерфейса.

Представьте себе этот супер простой пример:

 <div classNames={clsx(wrapper, post.new amp;amp; classes.new)}>
  <p classNames={text}>Post</p>
  <p> Something else </p>
</div>
 

Стили тоже очень просты:

 const useStyles = makeStyles({
  wrapper: {
    // styles
  },
  text: {
    // styles
  },
  new: { 
    text: { 
      color: 'red', // this does not work, why? :[
    } 
  }
});
 

Вы, наверное, уже догадываетесь, в чем здесь проблема. Я хочу, чтобы у обертки new иногда был класс, и когда это происходит text , она становится красной. Это оно. Я совершенно не представляю, как это сделать.

Я знаю, что есть 'amp; .something' , но это выглядит как плохой подход, и я даже не знаю точного названия класса для текста, потому что классы-это тарабарщина ( makeStyles-text-somerandomnumber ). Я не хочу добавлять .новый класс ко всему, что нуждается в дополнительных стилях, что делать, если у меня есть несколько абзацев, которым нужны разные стили? Невозможно поддерживать. Наверное, я что-то упускаю, это так тривиально, но я понятия не имею, как это сделать!

Любая помощь будет высоко оценена!

Ответ №1:

 className={`wrapper ${this.state.something}`}
 

Я вижу , что ваш пост помечен reactjs , если вы используете React, вы можете просто динамически применять классы в любом их состоянии.

Не забудьте обратные ссылки для шаблонных литералов.

Комментарии:

1. Это хороший совет, но в моем случае он не сработает, я не хочу добавлять дополнительный класс к элементу «текст». Что, если бы у меня было 150 абзацев, которые должны быть красными? Мне пришлось бы добавить класс к каждому из них.

2. Итак, создайте компонент абзаца, который имеет свое собственное состояние, а затем отобразите каждый абзац с нужным вам содержимым в качестве реквизита, который передается в элемент? Вы даже можете сделать опору, которая переключает состояние элемента на новое или нет.