Vue3 特殊属性:key,ref,is

Vue3 特殊属性:key,ref,is

参考文档:https://v3.vuejs.org/api/special-attributes.html

vue3 特殊属性:

  • key
  • ref
  • is

key

期望值:number | string

特殊属性key主要用于提示Vue的虚拟DOM算法在区分新节点列表和旧节点列表时识别VNodes。没有key的时候,Vue使用一种算法来最小化元素移动,并尽可能就地修补/重用相同类型的元素。使用key,它将根据键的顺序变化对元素重新排序,而key不再存在的元素将总是被删除/销毁。

同一公共父元素的子元素必须具有唯一的key,重复的key会导致渲染错误。

最常用的使用示例是和v-for一起使用。

<ul>
    <li v-for="item in items" :key="item.id">...</li>
</ul>

它还可以用于强制替换元素/组件,而不是重用它。当你想要的时候,这很有用:

  • 恰当地触发组件的生命周期钩子
  • 触发transitions

示例:

<transition>
    <span :key="text">{{ text }}</span>
</transition>

当text改变,span将始终被替换,而不是修补,因此将触发transition

ref

期望值:string | Function

ref用于注册对元素或子元素的引用。引用将注册在父组件的$refs对象下。如果在普通DOM元素上使用,引用将是该元素,如果在子组件上使用,引用将是组件实例

<!-- vm.$refs.p 就是这个DOM节点 -->
<p ref="p">hello</p>

<!-- vm.$refs.child 就是child-component这个组件实例 -->
<child-component ref="child"></child-component>

<!-- 当动态绑定,我们可以将ref定义为一个回调函数,显示地传递元素或组件实例 -->
<child-component :ref="(el) => child = el"></child-component>

关于ref注册时间的一个重要提示:

因为ref本身是由render函数创建的,所以你不能在初始渲染时访问它们——它们还不存在!

$refs也是非响应式的,因此不应该尝试在数据绑定模板中使用它。

refs相关补充:

Template refs

尽管存在props和events,但有时您可能仍然需要在JavaScript中直接访问子组件,要实现这一点,可以使用ref属性作为子组件或HTML元素分配一个引用ID

<input ref="input" />

当你想以编程方式将这个输入焦点放到组件挂载上,这可能是有用的。

const app = Vue.createApp({})

app.component('base-input', {
    template: `
        <input ref="input" />
    `,
    methods: {
        focusInput() {
            this.$refs.input.focus()
        }
    },
    mounted() {
        this.focusInput()
    }
})

此外,你可以添加另一个ref到组件本身,并使用它来触发来自父组件的focusInput事件

<base-input ref="usernameInput"></base-input>
this.$refs.usernameInput.focusInput()

$refs只在组件呈现后填充,它只是作为直接操作子组件的口子——应该避免从模板或计算属性中访问$refs

is

期望值:string | Object(组件选项对象)

用于动态组件

例如:

<!-- 当currentView变化时,component改变 -->
<component :is="currentView"></component>
原文地址:https://www.cnblogs.com/cathy1024/p/13859900.html