首页 > 解决方案 > 单击时如何更改按钮颜色

问题描述

我有这组从 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"
        })
    }
}

这是图片在此处输入图像描述提前谢谢

标签: javascriptcssreactjsecmascript-6

解决方案


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

这是一个活生生的例子


推荐阅读