Полагаю, у вас просто неправильное понимание того, как работает JSS, и значения некоторых синтаксисов.Соответствующая документация: здесь .
Когда вы определяете свой объект стилей (или функцию, берущую в теме и возвращающую объект), каждый ключ в этом объекте упоминается JSS как "править».Ключом является имя правила, и JSS преобразует значение в класс CSS.Объект classes
, который вы возвращаете из useStyles
или который вводится как реквизит при использовании withStyles
, затем отображает имена правил в сгенерированные имена классов CSS.
Синтаксис $ruleName
являетсяспособ ссылки на имя класса CSS одного из других правил в вашем объекте стилей.&
относится к родительскому правилу.В вашем примере у вас есть правила с именами root
и selected
(когда они не закомментированы).
Следующее:
root: {
backgroundColor: "blue",
"&$selected": {
color: "blue",
backgroundColor: "red"
}
},
selected: {}
будет компилироваться в CSS следующим образом:
.root-0 {
background-color: blue;
}
.root-0.selected-0 {
color: blue;
background-color: red;
}
Передавая Material-UI следующее:
classes={{
root: classes.root,
selected: classes.selected
}}
selected={true}
Вы говорите ему применять "root-0 selected-0" в качестве имен классов в дополнение к именам классовприменяется для стиля по умолчанию.Без пустого имени правила selected: {}
вы не можете ссылаться на $selected
из правила root
(если вы это сделаете, JSS должен показывать вам предупреждение в консоли).
более простая альтернатива (начиная с v4) для ссылки на имя класса selected
.selected
- это одно из специальных состояний Material-UI, которое оно называет псевдоклассами , и документация предоставляет имя класса по умолчанию для каждого (например, Mui-selected
).
Thisозначает, что вы можете сделать следующее:
root: {
backgroundColor: "blue",
"&.Mui-selected": {
color: "blue",
backgroundColor: "red"
}
}
Это больше не ссылается на другое правило, поэтому selected: {}
не требуется, и selected: classes.selected
не требуется в classes
проп.Вместо этого это ссылка на фактическое имя класса, которое Material-UI применяет для стиля по умолчанию, когда selected={true}
.