Vue3-组合式API学习之模板Refs

学习来源

模板Refs

当使用组合式API时,reactive refs 和 template refs的概念已经是统一的。为了获得对模板内元素或组件实例的引用,我们可以像往常一样在setup()中声明一个ref并返回它:

<template>
  <div class="home" ref='root'>
      我是hme元素
  </div>
</template>
<script>
  import {ref,onMounted} from 'vue';
  export default {
    setup(){
      const root = ref(null);

      onMounted(()=>{
        console.log(root.value)    // <div class="home"> 我是hme元素 </div>
      })
    
      return {
        root,
      }
    }
  }
</script>

1. 配合render函数/JSX的用法

1.1 配合render函数

<template>
  <div></div>
</template>
<script>
  import { ref, h } from 'vue';
  export default {
    setup() {
      const root = ref(null);

      return () => h('div', {
        ref: root,
        style: "width:100px;height:100px;background:red;"
      })

    }
  }
</script>

1.2 使用JSX语法

<template>
  <div></div>
</template>
<script>
  import { ref } from 'vue';
  export default {
    setup() {
      const root = ref(null);

      return ()=><div ref = {root} style="width:100px;height:100px;background:blue;"/>
    }
  }
</script>

1.3 ref在v-for中的使用

模板ref在v-for中使用vue没有做特殊处理,需要使用函数型的ref来自定义处理方式:

<template>
  <ul>
    <li v-for="(item,i) in list" :ref="el => { divs[i] = el }" :key="i">
      {{item}}
    </li>
  </ul>
</template>
<script>
  import {ref,reactive,onBeforeUpdate} from 'vue';
  export default{
    setup(){
      const list = reactive([1,2,3]);
      const divs = ref([]);

      // 确保在每次变更之前重置引用
      onBeforeUpdate(()=>{
        divs.value = [];
      })

      return {
        list,
        divs
      }
    }
  }
</script>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值