Условные стили в JSS
В JSS вы должны использовать функцию для вставки имен стилей (в виде строк) в компонент. Я предполагаю, что вы используете injectSheet для вставки классов в подпорки, и просто исключили это из своего примера кода. injectSheet внедрит объект классов, который содержит пары значений ключей, например: [styleObjectPropertyName]: [dynamicInjectedCSSPropertyName], и вставит CSS в заголовок страницы.
Когда вы пытаетесь редактировать объект стиля после того, как это произойдет, он не реагирует, поэтому вам нужно заранее подготовить свои стили CSS и динамически удалить или применить их в коде.
пакет classNames
Вы можете использовать простую библиотеку, такую как classNames , чтобы условно применять стили, как я описал ниже.
import React from 'react';
import injectSheet from 'react-jss';
const styles = {
buttonPink: {
backgroundColor: 'pink',
},
buttonBlue: {
backgroundColor: 'blue',
},
};
class App extends Component {
state = {
isButtonColorPink: true,
};
changeButtonColor = () => {
}
render() {
const { buttonColorPink } = this.state;
const { classes } = this.props;
return (
<div className="App">
<button className={classNames({
[classes.buttonPink]: isButtonColorPink,
[classes.buttonBlue]: !isButtonColorPink,
})} onClick={this.toggleStyle}>Switch user</button>
</div>
);
}
}
export default injectSheet(styles)(App);
В качестве альтернативы вы можете просто использовать встроенный стиль для любого динамического стиля - что-то вроде style={{ backgroundColor: this.state.buttonColor }}
внутри кнопки, и просто изменить свойство buttonColor с помощью thisState внутри метода класса.