簡體   English   中英

如何在React中刪除/添加大量按鈕(或任何DOM元素)的類?

[英]How do you remove/add classes for a lot of buttons(or any DOM elements) in React?

我有很多按鈕想要刪除/添加類。 主要是,如果已選擇它們,我想向它們添加一個“選定”類。 我不想創建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
   });
}

這似乎太冗長,而且似乎是錯誤的。 但是我找不到其他辦法。 有什么建議么?

您可以做一些事情使您的代碼更加干燥。 我們可以嘗試將一些常用功能納入更通用的功能,並在需要時進行循環。

首先,您可以設置一個帶有參數的按鈕處理程序:

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)} />
    ));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM