精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Vue3.5 源碼解析, useTemplateRef 實(shí)現(xiàn)原理

開發(fā) 前端
useTemplateRef 的實(shí)現(xiàn)并不復(fù)雜,本質(zhì)上 依然是基于 ref 的實(shí)現(xiàn),只不過是在 ref 上進(jìn)行了封裝。訪問 vue-next-3.5.0-master/packages/runtime-core/src/helpers/useTemplateRef.ts? 下的代碼,可以看到 useTemplateRef 的實(shí)現(xiàn)邏輯。

Hello,大家好,我是 Sunday。

2024年9月3日,Vue 3.5 的正式版終于來了。

前幾天咱們分享了 Vue 3.5 新特性 其中 useTemplateRef 這個(gè) API 被很多同學(xué)所關(guān)注。那么這個(gè) API 在源碼中究竟是怎么實(shí)現(xiàn)的呢?今天咱們就來看一下!

useTemplateRef 的作用

useTemplateRef 是用來專門獲取 dom 或者 組件示例 的。

在之前,如果我們想要獲取 dom ,那么需要這么做:

  1. 先為 dom 指定 ref 屬性,并且給定一個(gè) value 值
  2. 在 js 中,聲明 value 值的變量,并且給定初始值為 空的 ref
<script setup>
// 首先,您定義了一個(gè)值為undefined或空的ref
// 并以您想要的方式命名生成的可用內(nèi)容
const divEl = ref();
</script>

<template>
<!-- 然后使用與“ref”屬性的值相同的名稱,在模板中的某個(gè)地方 -->
<div ref="divEl" ></div>
</template>

但是,這種方案存在一個(gè)問題,那就是:ref 通常用來聲明響應(yīng)式數(shù)據(jù)。當(dāng) ref 不光作為響應(yīng)式聲明,還被作為 dom 實(shí)例的時(shí)候,那么就難免有點(diǎn)讓人疑惑了。

所以在(3.5 之后) Vue 推出了一個(gè)新的 API 叫做 useTemplateRef 來解決這個(gè)問題:

<template>
 <div>
  <div ref="el">程序員Sunday</div>
 </div>
</template>

<script setup>
import { onMounted, useTemplateRef } from 'vue'

const elRef = useTemplateRef('el')

onMounted(() => {
 console.log(elRef.value) // dom 示例
})
</script>

useTemplateRef 的實(shí)現(xiàn)原理

useTemplateRef 的實(shí)現(xiàn)并不復(fù)雜,本質(zhì)上 依然是基于 ref 的實(shí)現(xiàn),只不過是在 ref 上進(jìn)行了封裝。

訪問 vue-next-3.5.0-master/packages/runtime-core/src/helpers/useTemplateRef.ts 下的代碼,可以看到 useTemplateRef 的實(shí)現(xiàn)邏輯。

圖片圖片

直接看這個(gè)代碼是有點(diǎn)復(fù)雜的,我們把它簡化一下:

export function useTemplateRef(
  key: Keys,
){
  const i = getCurrentInstance()
  const r = shallowRef(null)
  if (i) {
    const refs = i.refs === EMPTY_OBJ ? (i.refs = {}) : i.refs

    Object.defineProperty(refs, key, {
        enumerable: true,
        get: () => r.value,
        set: val => (r.value = val),
      })
  }
  return r
}

剔除掉 “邊緣邏輯” 之后,我們可以得到如上代碼。

首先來看 入?yún)ⅲ簁ey:

key 代表傳入 ref 值,比如在 useTemplateRef('el') 中,代表的就是 "el"

然后是變量,這里主要涉及到兩個(gè):

第一個(gè) i:通過 getCurrentInstance() 獲取,得到的是 上下文實(shí)例。

接下來,通過 i.refs 獲取到所有的 ref 數(shù)據(jù),然后為 refs 添加 Object.defineProperty 的監(jiān)聽,監(jiān)聽的屬性名就是入?yún)?key。如果以 useTemplateRef('el') 為例,那么就是 "el"。

通過監(jiān)聽對(duì)應(yīng) key 的 get 和 set 標(biāo)記,這里 重點(diǎn)關(guān)注 set 標(biāo)記,在這里為 r.value 進(jìn)行了賦值,即:r.value = val。這里的 val 就是 refs[key] 的值,也就是對(duì)應(yīng)的 ref 組件實(shí)例。

第二個(gè) r:通過 shallowRef(null) 獲取,作為返回值

r 作為 useTemplateRef 的返回值即 最終獲取的組件示例。

查看 shallowRef 方法(vue-next-3.5.0-master/packages/reactivity/src/ref.ts),可以看到該方法最終會(huì)生成 ref 示例:

圖片圖片

同時(shí),在上面我們知道了 r.value 的值,是在觸發(fā) refs[key] 的 setter 行為時(shí)賦值的,賦值的對(duì)象即為 ref 組件實(shí)例

因此,當(dāng) useTemplateRef 返回 r 時(shí),我們就可以通過 r.value 拿到 ref 組件實(shí)例 了

總結(jié)

那么到這里,我們就看完了 useTemplateRef 的大致源碼。整個(gè) useTemplateRef 源碼實(shí)現(xiàn)并不復(fù)雜,主要邏輯分為兩步:

  1. 通過 Object.defineProperty 監(jiān)聽 ref[key] 的 setter 行為,為 r.value 賦值
  2. 通過 shallowRef 生成 ref 實(shí)例,并作為 useTemplateRef 的返回值
責(zé)任編輯:武曉燕 來源: 程序員Sunday
相關(guān)推薦

2024-09-05 09:17:14

2024-09-02 08:48:45

2025-05-15 08:10:00

Vue 3.5Vue

2024-11-13 09:57:22

2024-11-06 10:47:53

2025-05-29 01:55:00

Vue3.5API性能

2024-07-11 09:00:13

2024-10-14 12:56:28

2025-07-03 09:36:35

2024-01-18 08:31:22

go實(shí)現(xiàn)gorm框架

2025-01-07 13:48:57

2021-05-26 11:30:24

Java線程池代碼

2025-06-24 10:18:37

2021-10-27 16:52:37

LayoutInfl源碼解析

2025-02-06 08:24:25

AQS開發(fā)Java

2025-03-14 12:30:00

Redis RDBRedis數(shù)據(jù)庫

2021-02-02 13:45:31

Vue代碼前端

2022-12-09 08:10:12

kubectl容器源碼

2021-09-09 06:55:43

AndroidViewDragHel原理

2017-05-31 13:23:41

神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

青青草观看免费视频在线| 黄视频网站免费看| 日本成人片在线| 中文字幕的久久| 99久久99久久精品国产片| 国产精品一区二区6| 日韩欧美在线中字| 欧美成人女星排行榜| 男女视频网站在线观看| h视频网站在线观看| 国产精品911| 日韩免费观看av| 亚洲精品久久久久久国| 欧美毛片免费观看| 7777女厕盗摄久久久| 欧美色图色综合| 久久亚洲天堂| 久久久久国产精品麻豆| 国产精品麻豆免费版| 中文在线字幕免费观| 亚洲高清电影| 久久国产精品电影| 成年人在线免费看片| 伦理一区二区三区| 日韩一区二区三区免费看 | 99reav在线| 性生活三级视频| 亚洲三级av| 欧美日韩精品一区二区三区四区| 黄色国产一级视频| 91麻豆一二三四在线| 国产欧美日韩视频在线观看| 国产一区二区不卡视频| 精品国产av一区二区三区| 日日骚欧美日韩| 2019亚洲男人天堂| 国产亚洲精品久久久久久无几年桃 | 天天操天天综合网| 久久久久福利视频| 色老头视频在线观看| 2023国产一二三区日本精品2022| 99视频在线免费观看| 国产精品老熟女视频一区二区| 久久久成人网| 欧美一级高清免费| 日韩久久久久久久久| 亚洲午夜视频| 欧美成人剧情片在线观看| 国产色无码精品视频国产| 日韩av密桃| 色婷婷综合久久久久| 一级片手机在线观看| 亚洲区小说区| 亚洲美女av在线| 91网站免费视频| 嫩草影视亚洲| 伊人激情综合网| 夫妇交换中文字幕| 日韩精品诱惑一区?区三区| 伊人av综合网| 日本精品人妻无码77777| 亚洲精品99| 欧美第一黄色网| 国产一级一级片| 国产精品美女久久久浪潮软件| 高清一区二区三区日本久| 日本熟妇毛茸茸丰满| 国产亚洲一级| 国产精品va在线| 91欧美日韩麻豆精品| 国产老肥熟一区二区三区| 国产精品亚洲综合天堂夜夜| 国产麻豆免费视频| 成人国产一区二区三区精品| 久久精品日产第一区二区三区精品版| 男男电影完整版在线观看| 国产日韩欧美一区二区三区乱码 | 男男做爰猛烈叫床爽爽小说| 久久综合影院| 中文字幕国产亚洲| 国产盗摄x88av| 一本一本久久| 国产精品男人的天堂| 国产免费高清视频| hitomi一区二区三区精品| 日韩av大全| 超碰个人在线| 天天综合天天做天天综合| 国产v亚洲v天堂无码久久久| 外国成人毛片| 亚洲黄色www| 国产精品18在线| 国产在线日韩| 国产精品美女www爽爽爽视频| 99国产精品99| 久久精品在线观看| 欧美视频在线第一页| 唐人社导航福利精品| 欧美一区二区三区视频在线| 成人免费av片| 女生裸体视频一区二区三区| 日本中文字幕久久看| 国产视频在线一区| 久久久久久免费毛片精品| 国产四区在线观看| 欧美成人精品一区二区男人小说| 91麻豆精品国产91久久久久久 | 4438全国成人免费| 97人妻人人澡人人爽人人精品| www..com久久爱| 亚洲欧洲日夜超级视频| 91超碰在线免费| 91麻豆精品国产自产在线观看一区 | 日韩欧洲国产| 最近2019年手机中文字幕| 国产一级特黄aaa大片| 精品在线播放午夜| 少妇特黄a一区二区三区| 美女高潮在线观看| 欧美成人性战久久| 精品无码一区二区三区蜜臀| 日本中文一区二区三区| 精品国产一二| 四虎亚洲成人| 欧美一区二区三区四区在线观看| 最新中文字幕av| 羞羞答答国产精品www一本| 风间由美一区二区三区| 超碰porn在线| 欧美一区二区在线播放| 女教师淫辱の教室蜜臀av软件| 久久综合亚州| 久久久综合亚洲91久久98| av在线理伦电影| 日韩精品中文字幕在线不卡尤物| 欧美三级黄色大片| 激情综合五月天| 亚洲精品一区二区三区四区五区| 欧美freesex| 亚洲欧美激情视频| 国产精品午夜影院| 99久久精品情趣| 免费在线观看视频a| 97久久精品| 欧美丰满少妇xxxx| 亚洲国产精品欧美久久| 一区二区三区四区在线免费观看 | 亚洲成人精品综合在线| 日日噜噜噜夜夜爽亚洲精品| 在线观看国产小视频| 中文字幕第一区综合| 奇米影视四色在线| 图片小说视频色综合| 成人性教育视频在线观看| 免费日本一区二区三区视频| 在线综合亚洲欧美在线视频| 综合五月激情网| 国产.欧美.日韩| 国产一区二区三区小说| 日韩欧美影院| 国产成人精品999| 在线免费观看黄色网址| 欧美一区二区三区的| 国产一级片免费| 91在线观看免费视频| 88av.com| 91精品国产自产在线观看永久∴ | 欧美日韩直播| 国产91亚洲精品| 日本三级在线视频| 欧美大片在线观看| 国产精品美女久久久久av爽| 久久蜜桃香蕉精品一区二区三区| 性欧美videossex精品| 亚洲成av人片乱码色午夜| 国产精品一区二区三区免费观看| 原纱央莉成人av片| 日韩中文字幕亚洲| 日韩在线观看视频网站| 91国内精品野花午夜精品| 人人澡人人澡人人看| www.99精品| 午夜精品中文字幕| 亚洲黄色免费| 无码免费一区二区三区免费播放| 免费一区二区三区在线视频| 538国产精品视频一区二区| 日韩三级影院| 亚洲第五色综合网| 在线亚洲欧美日韩| 亚洲第一激情av| 亚洲色图27p| 99久久国产综合色|国产精品| 国产又大又黄又粗的视频| 欧美日韩hd| 日韩免费中文专区| 超碰精品在线观看| 国产精品亚发布| 日韩激情电影免费看| x99av成人免费| 日本中文字幕一区二区有码在线| 51精品秘密在线观看| 久久青青草视频| 一区二区三区美女视频| 影音先锋男人在线| 91视视频在线直接观看在线看网页在线看| 亚洲美女性囗交| 亚洲在线一区| av免费看网址| 亚洲精品91| 亚洲精品8mav| 精品一区三区| 国产精品一级久久久| 日韩成人在线电影| 国产成人激情小视频| 岛国av免费在线观看| xxx成人少妇69| 国产福利在线视频| 亚洲精品自产拍| 欧洲成人一区二区三区| 欧美精品v国产精品v日韩精品| 高潮毛片又色又爽免费| 亚洲午夜免费电影| 黄色片在线观看网站| 国产精品每日更新| 国产91丝袜美女在线播放| 91色九色蝌蚪| 免费在线观看成年人视频| 成人性生交大片| 韩国三级hd中文字幕有哪些| 卡一卡二国产精品| 亚洲36d大奶网| 日韩影院免费视频| 精品久久久久久无码国产| 午夜在线播放视频欧美| 国产精品宾馆在线精品酒店| 宅男噜噜噜66一区二区| 青青草国产精品视频| 亚洲东热激情| 99视频在线免费播放| 亚洲国产高清一区| 黄色一级片在线看| 亚洲区国产区| 欧美 国产 综合| 国产亚洲网站| 日韩精品免费播放| 日本一区中文字幕| 亚洲成人av免费看| 免费精品视频最新在线| 午夜在线观看av| 九九九久久久精品| 999热精品视频| 国产成人免费视频一区| 肉丝美足丝袜一区二区三区四| 国产成人av一区二区| 日韩精品视频一区二区| 91在线porny国产在线看| 国产ts丝袜人妖系列视频| 久久婷婷成人综合色| 超薄肉色丝袜一二三| 国产精品美女久久久久av爽李琼| 三级黄色在线观看| 一区二区欧美视频| 日本在线视频免费| 91久久精品国产91性色tv| 在线观看免费视频一区| 日韩视频在线观看一区二区| 日韩一级免费毛片| 亚洲免费av电影| 日韩在线免费电影| 欧美激情成人在线视频| 中文字幕在线高清| 日韩美女在线播放| 国产精品日韩精品在线播放| 国产精品精品软件视频| 色综合综合网| 最新国产精品久久| 国产欧美日韩综合一区在线播放| 亚洲欧洲免费视频| 第一页在线视频| 国产91在线|亚洲| 精品国产av无码| 亚洲丝袜另类动漫二区| 日韩无码精品一区二区三区| 欧美色涩在线第一页| 性生交大片免费看女人按摩| 亚洲欧美日韩国产成人| 成人片在线看| 欧美在线一级va免费观看| 国产成人免费精品| 国产欧美日韩综合精品二区| heyzo久久| 男的插女的下面视频| 青娱乐精品视频| 免费日本黄色网址| 国产精品黄色在线观看| 六月丁香在线视频| 欧美一区二区免费| 青青草观看免费视频在线| 久久99亚洲精品| 欧美在线va视频| 国产在线精品一区二区三区》| 99精品视频在线| www.亚洲天堂网| 国产69精品久久久久777| 国产三级短视频| 欧美日韩国产精品一区| 国产情侣在线播放| 在线视频国产日韩| 免费看男女www网站入口在线| 亚洲一区二区三区香蕉| 超碰成人久久| 日韩少妇内射免费播放18禁裸乳| 国产精品99久久久久久似苏梦涵| 干b视频在线观看| 精品日韩中文字幕| 日本波多野结衣在线| 亚洲高清免费视频| 欧美另类videosbestsex日本| 国产精品一二| youjizz.com国产| 自拍视频在线观看一区二区| 蜜臀99久久精品久久久久小说 | 国产精品99一区二区三| av天堂永久资源网| 波多野结衣中文字幕一区二区三区| 亚洲色图 激情小说| 一本久道久久综合中文字幕| 欧美视频一二区| 欧美激情女人20p| 涩爱av色老久久精品偷偷鲁| 91免费网站视频| 久久精品国产一区二区三区免费看| 中文幕无线码中文字蜜桃| 国产乱人伦精品一区二区三区| 精品一区视频| 亚洲精品国产精品国自产| 老妇喷水一区二区三区| 成人网站免费观看| 精品久久久久久亚洲国产300| 黑人乱码一区二区三区av| 九九综合九九综合| 一区二区三区高清在线观看| 乱子伦一区二区| 国产成人在线免费| 久操免费在线视频| 亚洲精品一区二区精华| heyzo中文字幕在线| 韩国成人av| 日韩午夜在线电影| 第四色在线视频| 欧美性猛交xxxx富婆| 美女欧美视频在线观看免费| 国产成人福利网站| 精品久久久亚洲| 最新免费av网址| 亚洲精品老司机| 成人毛片在线免费观看| 性欧美xxxx视频在线观看| 亚洲影院天堂中文av色| 热久久精品免费视频| 国产精品乱人伦| 国内精品国产成人国产三级| 久久久久这里只有精品| 欧美日韩一本| 欧美日韩亚洲自拍| 亚洲人被黑人高潮完整版| 丰满人妻一区二区三区免费| 日本精品视频在线观看| 欧美第一精品| 性感美女一区二区三区| 欧美视频不卡中文| 欧美成人三区| 国产精品乱码一区二区三区| 老司机久久99久久精品播放免费| 亚洲一区 欧美| 精品区一区二区| 免费福利视频一区二区三区| 亚洲一区二区在线看| 国产91精品露脸国语对白| 亚洲成人第一网站| 久久亚洲精品一区| 欧美交a欧美精品喷水| 亚洲视频一二三四| 午夜精品福利一区二区蜜股av| 国产福利在线| www.一区二区三区| 日韩精品视频网站| 91精品国产高清一区二区三蜜臀| 亚洲欧洲黄色网| 日韩成人在线观看视频| 麻豆av免费在线| 夜夜嗨av一区二区三区四季av| 国产视频三级在线观看播放| 99免费在线观看视频| 美女网站在线免费欧美精品| 国产主播喷水一区二区| 玖玖精品一区| 爱情岛论坛vip永久入口| 一二三四社区欧美黄|