react实现点击选中的li高亮的示例代码


Posted in Javascript onMay 24, 2018

虽然只是一个简单的功能,还是记录一下比较好。页面上有很多个li,要实现点击到哪个就哪个高亮。当年用jq的时候,也挺简单的,就是选中的元素给addClass,然后它的兄弟元素removeClass,再写个active的样式就搞定了。那现在用react要实现类似的操作,我想到的就是用一个currentIndex,通过判断currentIndex在哪个元素实现切换。

先上一下效果图:

react实现点击选中的li高亮的示例代码

代码:

class Category extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      currentIndex: 0
    }
    this.setCurrentIndex = this.setCurrentIndex.bind(this)
  }
  setCurrentIndex(event) {
    this.setState({
      currentIndex: parseInt(event.currentTarget.getAttribute('index'), 10)
    })
  }
  render() {
    let categoryArr = ['产品调整', '接口流量', '负载均衡', '第三方软件调整',
              '安全加固', '性能控制', '日志查询', '业务分析'];
    let itemList = [];
    for(let i = 0; i < categoryArr.length; i++) {
      itemList.push(<li key={i}
               className={this.state.currentIndex === i ? 'active' : ''}
               index={i} onClick={this.setCurrentIndex}
             >{categoryArr[i]}</li>);
    }
    return <ul className="category">{itemList}</ul>
  }
}

css部分

.category {
      padding-left: 0;
      &:after {
        content: '';
        display: block;
        clear: both;
      }
      li {
        float: left;
        width: 23%;
        height: 40px;
        margin-right: 10px;
        margin-bottom: 10px;
        border: 1px solid $border-color;
        list-style: none;
        color: $font-color;
        line-height: 40px;
        text-align: center;
        font-size: 14px;
        cursor: pointer;
        &.active {
          border-color: #079ACD;
        }
     }

是不是很简单呢。就是在生成这些li的时候给元素添加一个index标志位,然后点击的时候,把这个index用event.currentTarget.getAttribute('index')取出来,然后去设置currentIndex的值,再写一写css的active样式就搞定了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery EasyUI API 中文文档 - EasyLoader 加载器
Sep 29 Javascript
js的正则test,match,exec详细解析
Jan 29 Javascript
jquery无法设置checkbox选中即没有变成选中状态
Mar 27 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
Jun 19 Javascript
继续学习javascript闭包
Dec 03 Javascript
JavaScript中rem布局在react中的应用
Dec 09 Javascript
jQuery插件imgPreviewQs实现上传图片预览
Jan 15 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
Mar 26 Javascript
详解React native fetch遇到的坑
Aug 30 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
Aug 30 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
Jun 02 jQuery
如何搭建一个完整的Vue3.0+ts的项目步骤
Oct 18 Javascript
浅谈Webpack 是如何加载模块的
May 24 #Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
May 24 #jQuery
详解javascript中的变量提升和函数提升
May 24 #Javascript
JavaScript轮播停留效果的实现思路
May 24 #Javascript
vue2单元测试环境搭建
May 24 #Javascript
Vue+mui实现图片的本地缓存示例代码
May 24 #Javascript
vue组件name的作用小结
May 23 #Javascript
You might like
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
PHP新手上路(十四)
2006/10/09 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
php代码架构的八点注意事项
2016/01/25 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
JS中的BOM应用
2018/02/02 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
python中的print()输出
2019/04/12 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
Python imread、newaxis用法详解
2019/11/04 Python
安装PyInstaller失败问题解决
2019/12/14 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
关于VPN
2012/06/10 面试题
车辆维修工自我评价怎么写
2013/09/20 职场文书
学期自我鉴定范文
2013/10/01 职场文书
工作表现评语
2014/01/19 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server