我在组件上有很多元素,在某些情况下需要“活动”和“禁用”类。
例如-: 1-那里我需要在点击时切换活动班级:-
<div className="action-group cont-align">
<label>Alignment</label>
<div className="action-group-inner">
<i className="fas fa-align-left" data-align="Left" onClick={this.handleAlign}></i>
<i className="fas fa-align-center" data-align="Middle" onClick={this.handleAlign}></i>
<i className="fas fa-align-right" data-align="Right" onClick={this.handleAlign}></i>
</div>
</div>
2-我还需要切换活动班级:-
<div className="action-group cont-color">
<label>Color</label>
<div className="action-group-inner">
<i className="color-cont black" onClick={this.handleFontColor} data-color="black"></i>
<i className="color-cont blue" onClick={this.handleFontColor} data-color="#2027aa"></i>
</div>
</div>
3-我需要在字体较小(字体太小)和字体较大(字体太大)上添加禁用类:-
<div className="action-group cont-fontSize">
<label>Size</label>
<div className="action-group-inner">
<i className="font-small" onClick={this.handleFontSizeDec}>A</i>
<i className="font-large" onClick={this.handleFontSizeInc}>A</i>
</div>
</div>
我是否需要维护许多状态以仅用于添加/删除类?
答案 0 :(得分:0)
您可能要使用此软件包:https://github.com/JedWatson/classnames
带有按钮状态的示例:
var classNames = require('classnames');
var Button = React.createClass({
// ...
render () {
var btnClass = classNames({
btn: true,
'btn-pressed': this.state.isPressed,
'btn-over': !this.state.isPressed && this.state.isHovered
});
return <button className={btnClass}>{this.props.label}</button>;
}
});
答案 1 :(得分:0)
我建议将<i className="fas fa-align-left" data-align="Left" onClick={this.handleAlign}></i>
移至单独的部分,并保持 state 的状态,然后通过该 state 映射到呈现此。
this.state ={
Alignments:[], // Please add all your allingments here
Colors:[], // Please add all your Color here
Sizes:[], // Please add all your Size here
activeAlingment:0,
activeColor:0,
activeSize:0
}
handleSetActiveAllingment = (index) =>{
this.setState({activeAlingment:index})
}
handleSetActiveColor = (index) =>{
this.setState({activeColor:index})
}
handleSetActiveSize = (index) =>{
this.setState({activeSize:index})
}
请使用此状态映射此状态以创建组件。
this.state.Alignments.map((alingment,Index)=>{
isactive = this.state.activeAlingment == Index ? "active" : "";
return <Alingment activeClass={isactive} clickHandler={() => this.handleSetActiveAllingment(Index)}>
});
this.state.Colors.map((color,Index)=>{
isactive = this.state.activeColor == Index ? "active" : "";
return <Colors activeClass={isactive} clickHandler={()=>this.handleSetActiveColor(Index)}>
});
这样,您的组件将可重用,并且您还将实现所需的功能。
答案 2 :(得分:0)
使用以下代码片段和字符串插值来完成工作:
const classnames = someCondition? "color-cont black": "color-cont black newStyle others";
<div className=`$(classnames)` ...>