美文网首页
React-实现一个li标签多选

React-实现一个li标签多选

作者: 一座被占用 | 来源:发表于2016-12-20 22:53 被阅读0次

    先来描述一下遇到的问题:

    条件1:父组件A调用子组件B,并传入了一个数组,在组件B中需要根据组件A传过来的数组遍历出一个个li 标签,并且能够实现对li标签的多选。

    条件2:项目引用的图标是基于iconfont实现的,为了统一规则,图标只能在js中引用,不可以在css中引用,所以在代码中会一次性引入两个icon,那么到底显示哪个呢?那就需要css来解决了。

    先看一下 iconfont 中我需要的两个 icon 

    很明显,一个表示选中状态一个表示没有选中的状态,在代码中使用的规则如下:

    刚刚说到,两个icon同时放到一个div中的话就会导致同时看到就会两个icon,这个时候div的className是一个变量“select”就是这里的关键,看一下select是如何设值的:

    上面中的file就是数组的一个元素,刚开始的时候file没有isselected这个元素,也就是说file.isselected应该是等于undefined的,那么就是执行else语句,那么就应该是

    然后在css里面进行布局设置:

    1.如果没有选中,div的class就是select,那么就应该根据css的上半部分来显示,也就是显示.active的内容

    2.如果选中,div的class就是 select active,会渲染上面的css,但是最终的效果还是下面的:显示alicon的内容,隐藏active的内容

    这样就实现了他们之间的切换。

    但是!!!

    file.isselected这个值如何设置呢?

    这个就需要通过state来实现了,给div绑定一个click事件:

    这里只简单的说一下方法的思路,具体实现看上面的代码就可以了:

    首先我们根据 点击的这个div绑定的file就可以获取到这个file的myid值(这里file是有这个值的,前面没交代清楚),然而 file 是属于allfilepackageList 数组中的某一个(请注意这里的某一个,我们现在还不知道具体是哪个),

    我们就遍历allfilepackageList数组,然后将每一个值的myid和file的myid值进行比较,如果相等就是说明目前点击的就是这个file,那么它就被选中了(也有可能是被选中了或者取消选中),那么只需要将这个this.state.allfilepackageList【i】的isselected进行取反就可以了(如果原来被选中,就取消选中,设值为false;如果原来没有被选中,就选中,设值为true)

    然后通过setState来重新渲染就可以实现了


    写在最后面的话:

    这篇文章是在实际项目中遇到的问题而“终结”出来的,说是终结还不如说是抄过来的,但是咱不怕。把别人的东西变成自己的东西那也是自己的是吧?

    工作了半年之久,遇到了很多的问题,也很少总结。这篇所谓的总结也只是遇到问题、解决方法。然而没有更深入的理解里面的原理,甚至从始至终都没有看过源码。这是我自身一个很大的问题!

    希望能找到好的方法总结学习,希望自己能够更勤奋!深挖,死究!努力提高自己的能力,变得强大!!!

    戒躁!

    相关文章

      网友评论

          本文标题:React-实现一个li标签多选

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