加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

v-for元素绑定事件代理

发布时间:2020-12-15 05:27:30 所属栏目:Java 来源:网络整理
导读:题目: vue 在 v-for 时给每项元素绑定事件需要用事件代理吗?为什么? 解析: 事件代理作用主要是 2 个 将事件处理程序代理到父节点,减少内存占用率 动态生成子节点时能自动绑定事件处理程序到父节点 这里我生成了十万个 span 节点,通过 performance moni

题目:

vue 在 v-for 时给每项元素绑定事件需要用事件代理吗?为什么?

解析:

事件代理作用主要是 2 个

  1. 将事件处理程序代理到父节点,减少内存占用率
  2. 动态生成子节点时能自动绑定事件处理程序到父节点

这里我生成了十万个 span 节点,通过 performance monitor 来监控内存占用率和事件监听器的数量,对比以下 3 种情况

?

1、不使用事件代理,每个 span 节点绑定一个 click 事件,并指向同一个事件处理程序

 <div>
      <span 
        v-for="(item,index) of 100000" 
        :key="index" 
        @click="handleClick">
        {{item}}
      </span>
 </div>

?

2、不使用事件代理,每个 span 节点绑定一个 click 事件,并指向不同的事件处理程序

  <div>
      <span 
        v-for="(item,index) of 100000" 
        :key="index" 
        @click="function () {}">
        {{item}}
      </span>
  </div>

?

3、使用事件代理

<div  @click="handleClick">
      <span 
        v-for="(item,index) of 100000"  
        :key="index">
        {{item}}
      </span>
 </div>

可以看到使用事件代理无论是监听器数量和内存占用率都比前两者要少

同时对比 3 个图中监听器的数量以及我以往阅读 vue 源码的过程中,并没有发现 vue 会自动做事件代理,
但是一般给 v-for 绑定事件时,都会让节点指向同一个事件处理程序(第二种情况可以运行,但是 eslint 会警告),

一定程度上比每生成一个节点都绑定一个不同的事件处理程序性能好,但是监听器的数量仍不会变,所以使用事件代理会更好一点。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读