#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. Итак, создайте компонент абзаца, который имеет свое собственное состояние, а затем отобразите каждый абзац с нужным вам содержимым в качестве реквизита, который передается в элемент? Вы даже можете сделать опору, которая переключает состояние элемента на новое или нет.