Vue3中ref與toRef的區(qū)別淺析
1. ref是復(fù)制,視圖會(huì)更新
如果利用ref將某一個(gè)對(duì)象中的某一個(gè)屬性值變成響應(yīng)式數(shù)據(jù)
我們修改響應(yīng)式數(shù)據(jù)是不會(huì)影響原始數(shù)據(jù)的;
同時(shí)視圖會(huì)跟新。
ref就是復(fù)制 復(fù)制是不會(huì)影響原始數(shù)據(jù)的
<template> <div> <div> <div>{{stateObj}}</div> <button @click="func1">按鈕</button> </div> </div> </template> <script> import {ref} from 'vue' export default { name: 'App', setup(){ let obj={name:"張三",age:22} //將對(duì)象中的某一個(gè)屬性 //變成響應(yīng)式數(shù)據(jù) //而不是將對(duì)象變成響應(yīng)式數(shù)據(jù) let stateObj=ref(obj.name) function func1(){ stateObj.value="張三變成李四"; //原始數(shù)據(jù)沒(méi)有發(fā)生改變 原始數(shù)據(jù)obj {name: "張三", age: 22} console.log("原始數(shù)據(jù)obj",obj) //響應(yīng)式數(shù)據(jù)發(fā)生改變了 /** 響應(yīng)式stateObj RefImpl { _rawValue: "張三變成李四", _shallow: false, __v_isRef: true, _value: "張三變成李四" } **/ //變成了一個(gè)ref的對(duì)象 console.log("響應(yīng)式stateObj",stateObj) } return {stateObj,func1} }, } </script>
2.toRef是引用,視圖不跟新
如果利用toRef將某一個(gè)對(duì)象中的屬性變成了響應(yīng)式的數(shù)據(jù)
我們修改響應(yīng)式的數(shù)據(jù)是會(huì)影響原始數(shù)據(jù)的
如果數(shù)據(jù)是通過(guò)toRef創(chuàng)建的,修改值后,數(shù)據(jù)不會(huì)觸發(fā)視圖
toRef是引用;它引用的是以前那個(gè)對(duì)象中的屬性
所以你修改后,會(huì)影響到原始數(shù)據(jù)終中的值
<template> <div> <div> <div>{{state}}</div> <button @click="func1">按鈕</button> </div> </div> </template> <script> import {toRef} from 'vue' export default { name: 'App', setup(){ let obj={name:"張三",age:22} //將對(duì)象中的某一個(gè)屬性name變成響應(yīng)式數(shù)據(jù) //而不是將對(duì)象變成響應(yīng)式數(shù)據(jù) let state=toRef(obj, 'name'); console.log('toRef',state) function func1(){ state.value="我是李四"; console.log('obj',obj) console.log('state',state) } return {state,func1} }, } </script>
3.結(jié)論
ref復(fù)制, 修改響應(yīng)式數(shù)據(jù),不會(huì)影響以前的數(shù)據(jù),界面會(huì)更改。
toRef引用, 修改響應(yīng)式的數(shù)據(jù),會(huì)影響以前的數(shù)據(jù),界面不會(huì)更新。
toRef的使用場(chǎng)景
如果想讓響應(yīng)式數(shù)據(jù)和原始數(shù)據(jù)關(guān)聯(lián)起來(lái)。
并且更新響應(yīng)式數(shù)據(jù)后,不想視圖更新;那么就可以使用toRef
小結(jié):
ref和toRef的區(qū)別
(1). ref本質(zhì)是拷貝,修改響應(yīng)式數(shù)據(jù)不會(huì)影響原始數(shù)據(jù);toRef的本質(zhì)是引用關(guān)系,修改響應(yīng)式數(shù)據(jù)會(huì)影響原始數(shù)據(jù)
(2). ref數(shù)據(jù)發(fā)生改變,界面會(huì)自動(dòng)更新;toRef當(dāng)數(shù)據(jù)發(fā)生改變是,界面不會(huì)自動(dòng)更新
(3). toRef傳參與ref不同;toRef接收兩個(gè)參數(shù),第一個(gè)參數(shù)是哪個(gè)對(duì)象,第二個(gè)參數(shù)是對(duì)象的哪個(gè)屬性
總結(jié)
到此這篇關(guān)于Vue3中ref與toRef區(qū)別的文章就介紹到這了,更多相關(guān)Vue3 ref與toRef區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vite3結(jié)合Svelte3使用@import導(dǎo)入scss樣式
這篇文章主要為大家介紹了Vite3結(jié)合Svelte3使用@import導(dǎo)入scss樣式實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06vue.js路由mode配置之去掉url上默認(rèn)的#方法
今天小編就為大家分享一篇vue.js路由mode配置之去掉url上默認(rèn)的#方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11基于Vue2實(shí)現(xiàn)動(dòng)態(tài)折扣表格
這篇文章主要為大家詳細(xì)介紹了如何基于Vue2實(shí)現(xiàn)動(dòng)態(tài)折扣表格,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01vue實(shí)現(xiàn)跳轉(zhuǎn)接口push 轉(zhuǎn)場(chǎng)動(dòng)畫示例
今天小編就為大家分享一篇vue實(shí)現(xiàn)跳轉(zhuǎn)接口push 轉(zhuǎn)場(chǎng)動(dòng)畫示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11Vue使用fabric.js實(shí)現(xiàn)局部截圖與大圖預(yù)覽功能
這篇文章主要為大家詳細(xì)介紹了Vue如何使用fabric.js實(shí)現(xiàn)局部截圖與el-image-viewer大圖預(yù)覽功能,文中的示例代碼講解詳細(xì),感興趣的可以了解下2024-02-02vue實(shí)現(xiàn)todolist基本功能以及數(shù)據(jù)存儲(chǔ)功能實(shí)例詳解
本文通過(guò)實(shí)例代碼給大家介紹了vue實(shí)現(xiàn)todolist基本功能以及數(shù)據(jù)存儲(chǔ)功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04Vue3項(xiàng)目中引入ElementUI并使用的示例詳解
ElementUI是一個(gè)強(qiáng)大的PC端UI組件框架,它不依賴于vue,但是卻是當(dāng)前和vue配合做項(xiàng)目開發(fā)的一個(gè)比較好的ui框架,本文主要介紹了如何在vue3中引入使用ElementUI,需要的可以參考一下2023-06-06