<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近在開發遇到一個問題,使用shallowRef
居然導致檢視更新了,這一看把我也給搞懵了,後來便仔細看了看檔案,現在來總結一下。
ref
是一個定義響應式的API
,可以通過存取.value
屬性修改並更新到檢視上。
但是shallowRef
並不會被深層遞迴成響應式,也就是說使用.value.屬性
是不會更新到試圖上的。只能是替換整個.value
才會更新。
那麼我們現在遇到的問題是怎麼樣導致的呢?
通過我去註釋程式碼,最後只剩下幾行程式碼,通過一個小例子來看看: 比如:
<script setup> import { shallowRef } from 'vue' let shallowValue = shallowRef({ age: 10 }) const change = () => { shallowValue.value.age= 20; console.log(shallowValue.value) // {age:20} } </script> <template> <h1>{{ shallowValue }}</h1> <button @click="change">change shallowRef</button> </template>
現在是這樣的,當我們點選按鈕時,列印出shallowValue
的會發現更新啦,但是檢視並未更新。
再定義一個ref
值。同樣在點選按鈕觸發的函數裡面改變ref
的值。會發現不僅是ref
的值更新啦,shallowRef
的值也更新啦。
這是怎麼回事呢?
我們在瀏覽debug
一下,發現執行refValue.value
觸發set
函數時同時一會觸發triggerRefValue
函數。
那triggerRefValue
函數又是什麼東東?
說到triggerRefValue
就可以提到triggerRef()
, triggerRef()
會強制觸發依賴於一個shallowRef
,同時會更新檢視.
<script setup> import { shallowRef,triggerRef } from 'vue' let refValue = ref("ref舊值") let shallowValue = shallowRef({ age: 10 }) const change = () => { shallowValue.value.age= 20; triggerRef(shallowValue) // refValue.value = 'ref的新值' console.log(shallowValue.value) } </script> <template> <h1>ref的值:{{refValue}}</h1> <h1>{{ shallowValue }}</h1> <button @click="change">change shallowRef</button> </template>
點選按鈕時會發現檢視同時也會更新。
現在我們回到剛才的那個問題,說到triggerRefValue
與triggerRef
,那他們倆是什麼關係呢? 在觸發triggerRefValue
下面有段程式碼。
就是triggerRef
函數,而這個函數裡面就一行程式碼,就是triggerRefValue
函數,所以說triggerRef
的核心功能就是triggerRefValue
函數來做的,上面說到triggerRef
會強制觸發檢視更新,就等於是triggerRefValue
強制檢視更新啦。
以至於在點選按鈕時修改ref
的值觸發了triggerRefValue
函數,間接影響到了shallowRef
的值,才會使檢視更新。
事情就是怎麼個事情,想要解決這個問題,只能是在開發時避免這個這種寫法。
以上就是vue shallowRef作用及引發問題詳解的詳細內容,更多關於vue shallowRef作用的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45