温馨提示: 豌豆仅提供国内节点,不提供境外节点,不能用于任何非法用途,不能访问境外网站及跨境联网。

免费领取1万IP!

每日一题(web前端)

发布时间:

第 1 题:写 React / Vue 项目时为什么要在列表组件中写 key,其作用是什么? 

key是给每一个vnode的唯一id,可以依靠key,更准确, 更的拿到oldVnode中对应的vnode节点。

1. 更准确

因为带key就不是就地复用了(不带有key,并且使用简单的模板,基于这个前提下,可以更有效的复用节点,diff速度来看也是不带key更加快速的,因为带key在增删节点上有耗时。这就是vue文档所说的默认模式。但是这个并不是key作用,而是没有key的情况下可以对节点就地复用,提高性能。

这种模式会带来一些隐藏的副作用,比如可能不会产生过渡效果,或者在某些节点有绑定数据(表单)状态,会出现状态错位。VUE文档也说明了 这个默认的模式是高效的,但是只适用于不依赖子组件状态或临时 DOM 状态 (例如:表单输入值) 的列表渲染输出

2. 更快

利用key的唯一性生成map对象来获取对应节点,比遍历方式更快。

原答案 -----------------------

vue和react都是采用diff算法来对比新旧虚拟节点,从而更新节点。在vue的diff函数中(建议先了解一下diff算法过程)。
在交叉对比中,当新节点跟旧节点头尾交叉对比没有结果时,会根据新节点的key去对比旧节点数组中的key,从而找到相应旧节点(这里对应的是一个key => index 的map映射)。如果没找到就认为是一个新增节点。而如果没有key,那么就会采用遍历查找的方式去找到对应的旧节点。一种一个map映射,另一种是遍历查找。相比而言。map映射的速度更快。

相关文章


1,nginx简介,编译与安装 Halcon——Sobel_dir算子解析 (六十五)java版spring cloud微服务架构b2b2c电子商务平台-Hystrix监控面板 Python学习手册(第七章)字符串 python学习-表达式 TimeLine类 sqlserver查询所有表行数 电商网站50W-100W高并发,秒杀功能是怎么实现的?

上一篇:17HNUCM计科练习10题解
下一篇:Android : App客户端与后台服务的AIDL通信以及后台服务的JNI接口实现

咨询·合作