Vue 源码阅读(三)Special Attributes

news/2024/9/17 11:51:51

Special Attributes

包括以下:key ref slot v-*

key

https://vuejs.org/v2/api/#key

The key special attribute is primarily used as a hint for Vue’s virtual DOM algorithm to identify VNodes when diffing the new list of nodes against the old list. Without keys, Vue uses an algorithm that minimizes element movement and tries to patch/reuse elements of the same type in-place as much as possible. With keys, it will reorder elements based on the order change of keys, and elements with keys that are no longer present will always be removed/destroyed.

Children of the same common parent must have unique keys. Duplicate keys will cause render errors.

源码

src/compiler/parser/index.js

function processKey (el) {const exp = getBindingAttr(el, 'key')if (exp) {if (process.env.NODE_ENV !== 'production' && el.tag === 'template') {warn(`<template> cannot be keyed. Place the key on real elements instead.`)}el.key = exp}
}
parseHTML(template, {warn,expectHTML: options.expectHTML,isUnaryTag: options.isUnaryTag,shouldDecodeNewlines: options.shouldDecodeNewlines,start (tag, attrs, unary) {...if (inVPre) {processRawAttrs(element)} else {processFor(element)processIf(element)processOnce(element)processKey(element)// determine whether this is a plain element after// removing structural attributeselement.plain = !element.key && !attrs.lengthprocessRef(element)processSlot(element)processComponent(element)for (let i = 0; i < transforms.length; i++) {transforms[i](element, options)}processAttrs(element)}...}   
)

如何获取key

{mounted() {const key = this.vnode.key}
}

http://lihuaxi.xjx100.cn/news/242512.html

相关文章

软件测试培训教程:pytest与unittest区别

在软件测试培训教程中&#xff0c;会讲到关于pytest与unittest区别&#xff0c;那么本期教程小编就为大家详细的介绍一下pytest与unittest区别有哪些? pytest与unittest区别&#xff1a; 一、用例编写规则 1.unittest提供了testcases、testsuites、testfixtures、testrunner相…

php签名是做什么用的,这个签名在PHP中意味着什么()?

在PHP的语法中,这意味着该函数返回引用而不是值.例如&#xff1a;$foo foo;function & get_foo_ref (){global $foo;return $foo;}// Get the reference to variable $foo stored into $bar$bar & get_foo_ref();$bar bar;echo $foo; // Outputs bar, since $bar re…

python库引用的3种方式比较

方法一 import 库名 使用方式&#xff1a; <库名>.<函数名>(<函数参数>) 方法二 from 库名 import 函数名/* 使用方式&#xff1a; <函数名>(<函数参数>) 第一种方法可以避免第三方库函数和自定义函数重名 第二种更简洁&#xff0c;适用于引用…

谱聚类(Spectral clustering)(2):NCut

作者&#xff1a;桂。 时间&#xff1a;2017-04-13 21:19:41 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/6706400.html 声明&#xff1a;欢迎被转载&#xff0c;不过记得注明出处哦~ 前言 本文为谱聚类的第二篇&#xff0c;主要梳理NCut算法&#xff0c;关于谱聚类…

LSB图像信息隐藏算法matlab,实验二LSB信息隐藏实验.doc

实验二LSB信息隐藏实验.doc实验二LSB信息隐藏实验综合评分:【实验目的】&#xff1a;掌握MATLAB基木操作实现LSB信息隐藏和提取【实验内容】&#xff1a;(请将你实验完成的项11涂“■“)实验完成形式&#xff1a;■用MATLAB函数实现LSB信息隐藏和提取□其它&#xff1a;(请注明…

java培训:什么是抽象类?怎么定义?

什么是抽象类?怎么定义?这是属于java技术里面的一个知识点&#xff0c;本期教程就是围绕这个问题做的相关介绍&#xff0c;当定义一个类时&#xff0c;常常需要定义一些成员方法描述类的行为特征&#xff0c;但有时这些方法的实现方式是无法确定的。例如&#xff0c;在定义An…

python的turtle绘图体系入门必看(二)

1 turtle画笔控制函数 画笔操作后一直有效&#xff0c;一般成对出现 turtle.penup() 别名 turtle.pu() 画笔抬起&#xff0c;海龟在飞行(不在画布上留下图案) turtle.pendown() 别名 turtle.pd() 画笔落下&#xff0c;海龟在爬行 turtle.pensize(width) 别名 turtle.width(wi…

回调函数设计方法

引入&#xff1a;你显示器不亮了&#xff0c;你不知道怎么弄&#xff0c;那你就问在外地干IT的大表哥&#xff0c;你大表哥告诉你修理的方法&#xff0c;然后需要你自己来操作。你大表哥知道怎么弄&#xff0c;但是自己不去弄&#xff0c;而是由你去弄。换句话说&#xff0c;你…