key
預期:number | string | boolean (2.4.2 新增) | symbol (2.5.12 新增)
key
的特殊 attribute
主要用在 Vue
的虛擬 DOM
算法,在新舊 nodes
對比時辨識 VNodes
。如果不使用 key
,Vue
會使用一種最大限度減少動態元素并且盡可能的嘗試就地修改/復用相同類型元素的算法。而使用 key
時,它會基于 key
的變化重新排列元素順序,并且會移除 key
不存在的元素。
有相同父元素的子元素必須有獨特的 key。重復的 key 會造成渲染錯誤。
最常見的用例是結合 v-for:
<ul><li v-for="item in items" :key="item.id">...</li>
</ul>
它也可以用于強制替換元素/組件而不是重復使用它。當你遇到如下場景時它可能會很有用:
完整地觸發組件的生命周期鉤子
觸發過渡
例如:
<transition><span :key="text">{{ text }}</span>
</transition>
當 text
發生改變時,<span>
總是會被替換而不是被修改,因此會觸發過渡。
ref
ref
被用來給元素或子組件注冊引用信息。引用信息將會注冊在父組件的 $refs
對象上。如果在普通的 DOM
元素上使用,引用指向的就是 DOM
元素;如果用在子組件上,引用就指向組件實例:
<!-- `vm.$refs.p` will be the DOM node -->
<p ref="p">hello</p><!-- `vm.$refs.child` will be the child component instance -->
<child-component ref="child"></child-component>
當 v-for
用于元素或組件的時候,引用信息將是包含 DOM
節點或組件實例的數組。
關于 ref
注冊時間的重要說明:因為 ref
本身是作為渲染結果被創建的,在初始渲染的時候你不能訪問它們 - 它們還不存在!$refs
也不是響應式的,因此你不應該試圖用它在模板中做數據綁定。
is
用于動態組件且基于 DOM
內模板的限制來工作。
示例:
<!-- 當 `currentView` 改變時,組件也跟著改變 -->
<component v-bind:is="currentView"></component><!-- 這樣做是有必要的,因為 `<my-row>` 放在一個 -->
<!-- `<table>` 內可能無效且被放置到外面 -->
<table><tr is="my-row"></tr>
</table>
更多的使用細節,請移步至下面的鏈接。