单击时如何更改按钮颜色

时间:2021-04-28 11:50:45

标签: javascript css reactjs ecmascript-6

我有一组从 A 到 Z 的按钮,当我点击特定字母时,与该字母相关的品牌会弹出。我已经尝试了下面的代码,但是当我只单击一个按钮时,它适用于所有按钮。怎么解决

let brandList = 'ABCEDEFGHIJKLMNOPQRSTUVWXYZ'.split("");

constructor(props) {
    super(props)
    this.state = {
        bgColor: ""
    }
}

getBrandSortData(){
    return(
        <div className="BrandPageList_AlphabetContainer">
            <button value="all" className="BrandPageList_AllButton" onClick={this.handleClick}>All</button>
            {brandList.map((item,index) =>
                {
                    let disbaled = !this.isBrandCharacterAvailable(item)
                    return(
                        <button
                            disabled= {disbaled}
                            value={item}
                            key={index}
                            block="BrandPageList_AlphabetButtons"
                            mods = {{enabled : !disbaled}}
                            onClick={this.handleClick}
                            style={{backgroundColor: this.state.bgColor}}
                        >
                            {item}
                        </button>
                    )}

            )}
        </div>
    )
}

handleClick = event =>{
    const brandValues = event.target.value
    if(brandValues === "all"){
        console.log()
        return this.setAllBrands()
    }
    else{
        let brandSortDataByCharacter = this.state.brandSortData[brandValues]
        this.setState({
            allBrands:
                {
                    [brandValues]: brandSortDataByCharacter
                },
            bgColor: "red"
        })
    }
}

这是图片enter image description here提前致谢

1 个答案:

答案 0 :(得分:1)

无需使用 event 对象来确定您点击了哪个字母,您可以在呈现字母时将其传递给点击处理程序。

以下是如何实现这一目标的示例。我正在使用带有钩子的功能组件,因为这是推荐的方式,但您可以在类组件中执行相同的操作:

const Alphabet = () => {
  const [active, setActive] = useState();
  return (
    <div className='alphabet'>
      {'ABCEDEFGHIJKLMNOPQRSTUVWXYZ'.split('').map(char => (
        <div 
          className={`letter ${char === active ? 'active' : ''}`}
          onClick={() => setActive(char)}>{char}</div>
      ))}
    </div>
  );
};

这是一个 live example