如何为React中的许多按钮(或任何DOM元素)移除/添加类
How do you remove/add classes for a lot of buttons(or any DOM elements) in React?
我有很多按钮想删除/添加类。主要是,如果它们已经被选中,我想向它们添加一个"selected"类。我不想创建10个不同的状态变量和10个不同处理程序来设置状态,以便更改每个按钮上的类。有别的方法吗?目前,我的做法是:
var button1Class = ClassNames({'selected': this.state.button1Selected})
<button className={button1Class} onClick={this.handleButton1Clicked} />
handleButton1Clicked: function() {
this.setState({
button1Selected: !this.state.button1Selected
});
}
。。(按钮2-9)
var button10Class = ClassNames({'selected': this.state.button10Selected})
<button className={button10Class} onClick={this.handleButton10Clicked} />
handleButton10Clicked: function() {
this.setState({
button10Selected: !this.state.button10Selected
});
}
这似乎太过冗长,而且似乎是错误的。但我想不出其他办法了。有什么建议吗?
您可以做一些事情来使代码更加DRY。我们可以尝试将一些常见的功能拉到一个更通用的函数中,并在需要的地方进行循环。
首先,您可以设置一个接受参数的按钮处理程序:
handleButtonClick: function(index) {
var property = 'button'+index+'Selected';
var newState = {};
newState[property] = !this.state[property];
this.setState(newState);
}
然后,在渲染过程中循环,动态访问属性:
var buttons = [];
for ( var i = 1; i <= 10; i++ ) {
var className = ClassNames({
'selected': this.state['button'+i+'Selected']
});
buttons.push((
<button className={className} onClick={this.handleButtonClick.bind(this, i)} />
));
}
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 使用jquery创建dom元素会导致ie9出现拒绝访问错误
- 通过AJAX侦听向DOM添加某些元素
- 如何在使用Ractive.extend()时引用DOM元素
- 在d3中向DOM元素添加了图像,但现在它赢得了't过渡
- Selenium无法在浏览器DOM中定位元素
- 如何'剪切'DOM元素并将其显示在其他位置
- 转换<a>使用jQuery将文本字符串转换为dom元素
- 从dom中删除任何元素后,Touchmove事件停止触发
- d3在数据更新时错误地附加了dom元素
- 访问VueJS中的DOM元素
- 在Meteor中如何查找DOM元素(渲染后)
- 找到元素DOM的根节点(阴影或光)的最佳方法是什么?
- 在querySelector:如何获得第一个和最后一个元素?dom中使用的遍历顺序