美文网首页
React动态修改className的值

React动态修改className的值

作者: jebirth | 来源:发表于2018-06-10 17:25 被阅读0次

    应用场景

    • 在网页初始化时,第一列表有蓝色底层
    • 当点击随机一个列表,该列表变成蓝色底层,并去掉之前有蓝底的列表

    效果图如下所示:

    问题

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

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

    本文内容如下 :

    • 项目环境配置
    • 使用document和evt操作节点
    • 参考网站

    1. 项目环境配置

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

    2.使用document和evt操作节点

    • 设置列表数据
      通过unid库来设置唯一id,并设置数据,如下所示:
    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;
    }
    
    • 列表HTML代码,如下:
    {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. 参考网站

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

    相关文章

      网友评论

          本文标题:React动态修改className的值

          本文链接:https://www.haomeiwen.com/subject/sypmsftx.html