【问题标题】:How to change the background colour of button when clicked单击时如何更改按钮的背景颜色
【发布时间】:2021-05-31 06:10:45
【问题描述】:

我是 reactjsjavascript 的新手。当我单击字母表时,我有从 A 到 Z 的按钮列表,按钮的背景颜色应该改变。我试过下面的代码

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}
                >
                {item}
                </button>
            )}
                
            )}
        </div>
    )
}


handleClick = event =>{
    const brandValues = event.target.value
    if(brandValues === "all"){
        brandValues.style.backgroundColor = '#393939'
        return this.setAllBrands()
    }
    else{
        let brandSortDataByCharacter = this.state.brandSortData[brandValues]
       this.setState({
           allBrands:
               {
                   [brandValues]: brandSortDataByCharacter
               },
       })
    }
}

我无法更改背景颜色。如何解决这个问题。上面的代码是写在一个组件里面的。

【问题讨论】:

  • event.target 指的是元素本身。 event.target.value 指的是它的value property。您应该能够从中找出错误的地方
  • 你也可以使用stateuseRef hook
  • @kunalpanchal 如何处理状态

标签: javascript reactjs ecmascript-6


【解决方案1】:

更新您的 handleClick 事件处理程序

handleClick = event =>{
    const brand = event.target;
    if(brand.value === "all"){
        brand.style.backgroundColor = '#393939'
        return this.setAllBrands()
    }
    else{
        let brandSortDataByCharacter = this.state.brandSortData[brand.value]
       this.setState({
           allBrands:
               {
                   [brand.value]: brandSortDataByCharacter
               },
       })
    }
}

event.target 包含样式对象。

【讨论】:

  • 我尝试添加const brand = event.target;,但过滤器不会发生,因为brand 变量保存了我单击以对数据进行排序的按钮的值
【解决方案2】:

对于 React Js;

  var Button = React.createClass({
      getInitialState: function() {
        return {
          bgColor: 'red'
        }
        
      },
      
      handleClick: function() {
        this.setState({
          bgColor: 'blue'
        })
      },
      
      render : function() {
        return (
          <div>
            <button 
              onClick={this.handleClick} 
              style={{backgroundColor:this.state.bgColor}}>Button</button>
          </div>
        )
      }
    });
    
    ReactDOM.render(
      <Button />,
        document.getElementById('button')
    );
    `

对于 React Native,使用 Usestate 非常简单。

const [active, setActive] = useState(false);
  const Press1 = () => setActive(!active);

  const buttonTextStyle = {
    backgroundColor: active ? 'green' : 'red',
  };

在 React Native 中无需使用 Button,只需使用 Views 和 TouchableOpacity 创建您自己的可自定义按钮。

<TouchableOpacity style={{width: '50%'}} onPress={Press1}>
        <View style={buttonTextStyle}>
          <Text style={{textAlign: 'center', color: 'white'}}>
            Press Me
          </Text>
        </View>
      </TouchableOpacity>

希望它会起作用。

【讨论】:

  • 我尝试了reactjs 代码,但如果我点击任何按钮,它适用于所有按钮
猜你喜欢
  • 1970-01-01
  • 2014-10-09
  • 2017-08-02
  • 1970-01-01
  • 2015-08-08
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多