如何在点击React时将CSS类添加到元素中
How to add a CSS class to an element on click - React
如何在单击时将CSS类添加到现有的REACT元素中?
我创建了一个JSFiddle:https://jsfiddle.net/5r25psub/
在小提琴中,只有当我有以下语句时,代码才能工作:this.setState({color:blue});
我想要this.setState({className: 'green'});
之类的我做错了什么?
代码:
<html>
<script>
var Hello = React.createClass({
getInitialState: function(){
return {
color: 'blue'
};
},
handleClick: function(){
if (this.state.color === 'blue'){
this.setState({className = " green"});
} else {
this.setState({color: 'blue'});
}
},
render: function() {
return <button className={this.state.className} onClick={this.handleClick}>My background is: {this.state.color}, Click me to change</button>;
}
});
React.render(<Hello name="World" />, document.getElementById('container'));
</script>
<body>
<script src="https://facebook.github.io/react/js/jsfiddle-integration.js"></script>
<style>
.green {
background-color: lightgreen;
}
.blue {
background-color: lightblue;
}
</style>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
</body>
</html>
您可以使用此处的模块classnames
:
https://www.npmjs.com/package/classnames
所以你会做一些类似的事情:
getClassNames() {
return classNames({
'blue': this.state.clicked,
'green': !this.state.clicked
});
},
render () {
return <button className={this.getClassNames()} onClick={this.setState({clicked: !this.state.clicked})>
}
您需要将所有状态参数添加到getInitialState
,现在您唯一拥有的是color
,因此this.state.color
是中唯一的东西
当你把你的状态设置为className:something时,这是现在唯一的东西,甚至颜色都消失了。。。这就是为什么初始颜色是正常的淡灰色
setState中也有语法错误,它不是
this.setState({className = " green"});
应该是:
this.setState({className: " green"});
最后,React.render
已弃用,您现在需要使用ReactDOM.render
Fiddle:https://jsfiddle.net/omarjmh/69z2wepo/36597/
https://jsfiddle.net/ajvf50s6/3/
很可能,您应该更好地基于className
进行验证,而不是基于color
状态属性:
handleClick: function(){
if (this.state.className === 'blue'){
this.setState({className: "green"});
} else {
this.setState({className: "blue"});
}
}
此外,正如@Omarjmh所提到的,您的代码中有一个拼写错误。{className = " green"}
分配错误。
您可以这样做,而不是使用两个状态变量。
由于颜色的初始状态是蓝色,您可以将handleClick函数更改为:
handleClick: function(){
if (this.state.color === 'blue'){
this.setState({color : "green"});
} else {
this.setState({color: 'blue'});
}
}
对于className,考虑一个变量:
let colorClass= this.state.color === "blue" ? "blue" : "green"
现在,将className替换为如下所示,您需要将调用div类的对象括起来。
return <button className={colorClass} onClick={this.handleClick}>My background is: {this.state.color}, Click me to change</button>;
我希望它能正常工作。
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 如何使用jquery遍历具有动态添加元素的数组
- jQuery appendTo 替换元素而不是添加元素,如果正在添加的元素预先存在于列表中
- 如何使用jquery添加元素
- 动态添加元素上的 HammerJS
- CSS没有'使用javascript向页面动态添加元素时无法工作
- 使用Javascript在DOM元素中添加元素
- 在添加元素时激发JS事件
- 什么's是在IE8+中添加元素的最有效方法
- d3.js在添加元素时协调
- 使用路由器链接动态添加元素
- 动态添加元素
- 在页面内容完全加载后,使用jQuery在DOM中添加元素
- j查询绑定单击不添加元素
- 在循环 jQuery 上添加元素
- 从一个页面调用 javascript 函数以在第二个页面上添加元素
- 页面加载后向<正文>添加元素时出现问题
- 动态添加元素时刷新 HTML
- 动态添加元素时不触发 JQuery 事件
- 如何使用 JavaScript 获取动态添加元素的宽度