我有以下使用JSS的组件:
import React from 'react'
import injectSheet from 'react-jss'
const styles = {
button: {
backgroundColor: 'pink',
}
}
class App extends Component {
changeStyle = () => {
styles.button.backgroundColor: 'blue' //this obviously doesn't work
}
render() {
return (
<div className="App">
<button className={this.props.classes.button} onClick={this.changeStyle}>Switch user</button>
</div>
);
}
}
这绝对是一个简单的问题 . 当我点击按钮时,我希望背景会变为“蓝色”,但只是指定新颜色不起作用 .
3 回答
理想的模式是将按钮的颜色存储在状态对象中,然后在要更改颜色时更新该状态 .
您的问题的一个解决方案是这样的:
JSS中的条件样式
在JSS中,您应该使用函数将样式名称(作为字符串)注入组件 . 我假设您正在使用injectSheet将类注入到道具中,并将其从代码示例中删除 . injectSheet将注入包含键值对的classes对象,如下所示:[styleObjectPropertyName]:[dynamicInjectedCSSPropertyName],它会将CSS注入页面的 Headers 中 .
当您尝试在发生这种情况后编辑样式对象时,它不会被动,因此您需要事先准备好CSS样式并在代码中动态删除或应用它们 .
classNames包
您可以使用像classNames这样的简单库来有条件地应用样式,这是我在下面概述的方式 .
或者,您可以使用内联样式进行任何动态样式 - 如按钮内的
style={{ backgroundColor: this.state.buttonColor }}
,只需在类方法中使用thisState更改buttonColor属性 .使用JSS版本7.1.7,您可以使用函数值来定义样式 .
当你需要改变颜色时,调用
sheet
道具的update
方法:请注意,截至2018年8月,有limitations使用函数值