• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Vue 3.0 组合式API 模板引用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本节代码示例使用单文件组件的语法

本指南假定你已经阅读了组合式 API 简介响应性基础。如果你不熟悉组合式 API,请先阅读此文章。

在使用组合式 API 时,响应式引用模板引用的概念是统一的。为了获得对模板内元素或组件实例的引用,我们可以像往常一样声明 ref 并从 setup() 返回:

<template> 
  <div ref="root">This is a root element</div>
</template>


<script>
  import { ref, onMounted } from 'vue'


  export default {
    setup() {
      const root = ref(null)


      onMounted(() => {
        // DOM元素将在初始渲染后分配给ref
        console.log(root.value) // <div>这是根元素</div>
      })


      return {
        root
      }
    }
  }
</script>

这里我们在渲染上下文中暴露 root,并通过 ref="root",将其绑定到 div 作为其 ref。在虚拟 DOM 补丁算法中,如果 VNode 的 ref 键对应于渲染上下文中的 ref,则 VNode 的相应元素或组件实例将被分配给该 ref 的值。这是在虚拟 DOM 挂载/打补丁过程中执行的,因此模板引用只会在初始渲染之后获得赋值。

作为模板使用的 ref 的行为与任何其他 ref 一样:它们是响应式的,可以传递到 (或从中返回) 复合函数中。

#JSX 中的用法

export default {
  setup() {
    const root = ref(null)


    return () =>
      h('div', {
        ref: root
      })


    // with JSX
    return () => <div ref={root} />
  }
}

#v-for 中的用法

组合式 API 模板引用在 v-for 内部使用时没有特殊处理。相反,请使用函数引用执行自定义处理:

<template>
  <div v-for="(item, i) in list" :ref="el => { if (el) divs[i] = el }">
    {{ item }}
  </div>
</template>


<script>
  import { ref, reactive, onBeforeUpdate } from 'vue'


  export default {
    setup() {
      const list = reactive([1, 2, 3])
      const divs = ref([])


      // 确保在每次更新之前重置ref
      onBeforeUpdate(() => {
        divs.value = []
      })


      return {
        list,
        divs
      }
    }
  }
</script>

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

上一篇:
Vue 3.0 渲染机制和优化发布时间:2022-01-28
下一篇:
Vue 3.0 组合式API 提供/注入发布时间:2022-01-28
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap