React动态修改className的值

2018-06-10  本文已影响0人  jebirth

应用场景

效果图如下所示:

问题

  1. 在初始化时,为一个列表设置蓝底。
  2. 在点击一个列表时,移除之前列表蓝底,并着色蓝底。

解决
:hover,:active等伪类无法满足需求。通过操作ClassName的值,来控制列表的样式;设置一个变量pre,用于保存上一个蓝底的列表的id值(初始化为第一个)。

本文内容如下 :

1. 项目环境配置

设置项目环境。由于是React项目,在全局环境中安装:create-react-app ,然后运行:
npx create-react-app my-app //创建一个my-app的项目

2.使用document和evt操作节点

import uuid from 'uuid';
const items = [
    {
        "id": uuid(),
        "title": "European Aluminum Profile",
    },{
        "id": uuid(),
         "title": "Customized Aluminum Profile",
    },{
        "id": uuid(),
        "title": "Windows and Doors Aluminum Profile",
    },{
        "id": uuid(),
        "title": "Industrial Aluminum Accessories",
    }
]

export default items;
item{
    background-color: #fff;
}
itemFocus{
    background-color: blue;
}
{this.state.items.map( (item) => {
  return <div>
          <span id={item.id} 
                onClick={this.handleColor} 
                className="item">
            {item.title}
          </span>
      </div>
})}
removeColor = () => {
       document.getElementById(this.state.pre).setAttribute("class", "item");  
   }
addColor = () => {  
        document.getElementById(this.state.pre).setAttribute("class", "item itemFocus");  
    }

    在初始化时,着色;

componentDidMount(){
        this.addColor();
    }

    在点击事件触发时,去掉上一个颜色,并对当前列表着色。

handleColor = (evt) => {
        this.removeColor(); //去掉颜色
        let evtId = evt.target.getAttribute('id');
        this.setState({
            pre: evtId,
        }, function(){ this.addColor();});
    }

3. 参考网站

注:不懂或不足之处请留言。

上一篇下一篇

猜你喜欢

热点阅读