vue和react的diff中key的作用都差不多,主要是作为diff的识别标识。
<input v-if />
<input v-else />
上面这个例子,在vue里面,没有使用key,那么vue认为他们不是相同节点,切换input,都会重新卸载,新增一个新的input,但是设置key并将key设置为一样,vue就会复用该节点,并保存状态
{
show ? <input /> : <input />
}
在react没有指定key,标签相同那么react会识别他们的节点相同,相同则保存状态。 使用如果要切换tab时,不设置唯一的key,可能会导致保存状态带来的不想要的后果
在列表里 不管是vue还是react 给元素设置唯一key,增加,移动,修改节点时,会识别key,在新旧dom比较,
- 移动就复用节点移动
- 修改节点,也会复用节点然后修改节点属性
- 插入节点,识别key,然后仅仅在存在的节点的里面插入节点
会最大程度的复用节点,而不是大量的删除,重写新增节点。
如果不使用Key,那么将有大量的删除,新增节点操作.
vue和react识别相同节点细节不一样,对照上面两个例子来看。