關(guān)于vue3中的reactive賦值問(wèn)題
vue3 reactive賦值問(wèn)題
vue3中直接對(duì)reactive整個(gè)對(duì)象賦值檢測(cè)不到
let obj = reactive({ name: 'zhangsan', age: '18' }) obj = { name: 'lisi' age: '' } // 上面這樣賦值檢測(cè)不到,因?yàn)轫憫?yīng)式的是它的屬性,而不是它自身 // 如需要對(duì) reactive 賦值 // 方法1: 單個(gè)賦值 obj['name'] = 'lisi'; obj['age'] = ''; // 方法2:多包一層 let obj = reactive({ data: { name: 'zhangsan', age: '18' } }) obj.data = { name: 'lisi' age: '' }
vue3 reactive的坑
最近使用vue3的過(guò)程中發(fā)現(xiàn)reactive有一些問(wèn)題
清空reactive定義的數(shù)組時(shí)必須將length設(shè)為0,直接賦值一個(gè)空數(shù)組是沒(méi)有作用的,同理對(duì)象直接賦值一個(gè)空對(duì)象也沒(méi)有作用,只能遍歷對(duì)象一項(xiàng)一項(xiàng)刪,這里說(shuō)的沒(méi)有作用是不能響應(yīng)式的更新頁(yè)面,如果打印一下是能看到確實(shí)被刪除了,但是頁(yè)面沒(méi)有變化
清空數(shù)組
// 錯(cuò)誤示例 <template> ? <div>{{ arr }}</div> ? <button @click="click">點(diǎn)擊</button> </template> ? <script setup> import { reactive } from 'vue' let arr = reactive([1, 2, 3]) const click = () => { ? arr = [] ? console.log(arr) // 這里打印的結(jié)果是正常的空數(shù)組 } </script>
// 正確示例 <template> ? <div>{{ arr }}</div> ? <button @click="click">點(diǎn)擊</button> </template> ? <script setup> import { reactive } from 'vue' let arr = reactive([1, 2, 3]) const click = () => { ? arr.length = 0 // 這里和vue2是正好相反,vue2直接將數(shù)組length設(shè)為0是無(wú)效的 ? console.log(arr) } </script>
清空對(duì)象
// 錯(cuò)誤示例 <template> ? <div>{{ obj }}</div> ? <button @click="click">點(diǎn)擊</button> </template> ? <script setup> import { reactive } from 'vue' let obj = reactive({a: 111, b: 222}) const click = () => { ? obj = {} ? console.log(obj) // 這里打印的結(jié)果是正常的空對(duì)象 } </script>
// 錯(cuò)誤示例 <template> ? <div> ? ? <div>{{ obj }}</div> ? ? <button @click="click">點(diǎn)擊</button> ? </div> </template> ? <script setup> import { reactive } from 'vue' let arr = reactive({a: xxx, b: xxx }) const click = () => { ? for (let i in obj) { ? ? delete obj[i] ? } ? console.log(obj) // 這里打印的結(jié)果是正常的空數(shù)組 } </script>
同樣的道理直接賦值也不行,數(shù)組只能用數(shù)組的某些方法,或者直接修改索引,修改索引跟vue2又是相反,vue2只修改索引項(xiàng)沒(méi)有作用,對(duì)象直接使用點(diǎn)語(yǔ)法即可,直接賦一個(gè)對(duì)象沒(méi)有作用
這些問(wèn)題其實(shí)只要使用ref就可以解決,但是人官方推薦使用reactive。。。。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue3的reactive賦值問(wèn)題解決
- Vue3中reactive變量重新賦值無(wú)法響應(yīng)的3種處理方法
- vue3 reactive定義的引用類型直接賦值導(dǎo)致數(shù)據(jù)失去響應(yīng)式問(wèn)題
- vue3使用reactive賦值后頁(yè)面不改變
- Vue3 reactive響應(yīng)式賦值頁(yè)面不渲染的解決
- vue3中reactive數(shù)據(jù)被重新賦值后無(wú)法雙向綁定的解決
- vue3中reactive不能直接賦值的解決方案
- vue3中reactive的對(duì)象清空所引發(fā)的問(wèn)題解決方案(清空不了和清空之后再去賦值就賦值不了)
相關(guān)文章
一步步教你利用webpack如何搭一個(gè)vue腳手架(超詳細(xì)講解和注釋)
這篇文章主要給大家介紹了軟玉利用webpack如何搭一個(gè)vue腳手架的相關(guān)資料,文中有超詳細(xì)講解和注釋,對(duì)大家學(xué)習(xí)或者使用webpack具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01淺析vue-router jquery和params傳參(接收參數(shù))$router $route的區(qū)別
今天做項(xiàng)目時(shí)踩到了vue-router傳參的坑(jquery和params),所以決定總結(jié)一下二者的區(qū)別。感興趣的朋友跟隨腳本之家小編一起看看吧2018-08-08vue elementUI實(shí)現(xiàn)自定義正則規(guī)則驗(yàn)證
本文主要介紹了vue elementUI實(shí)現(xiàn)自定義正則規(guī)則驗(yàn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Vue使用jsmind實(shí)現(xiàn)生成腦圖的示例代碼
這篇文章主要為大家詳細(xì)介紹了Vue如何使用jsmind實(shí)現(xiàn)生成腦圖,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-03-03Vue中?引入使用?babel-polyfill?兼容低版本瀏覽器的方法
最近在項(xiàng)目中使用 webpack 打包后升級(jí),用戶反饋使用瀏覽器(chrome 45)訪問(wèn)白屏。經(jīng)過(guò)排查發(fā)現(xiàn):由于 chrome 45 無(wú)法兼容 ES6 語(yǔ)法導(dǎo)致的,接下來(lái)給大家介紹下Vue中?引入使用?babel-polyfill?兼容低版本瀏覽器方法,需要的朋友可以參考下2023-02-02vue2從數(shù)據(jù)變化到視圖變化之diff算法圖文詳解
這篇文章主要介紹了vue2從數(shù)據(jù)變化到視圖變化之diff算法圖文詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09基于Vue3實(shí)現(xiàn)的圖片散落效果實(shí)例
最近工作中遇到一個(gè)效果還不錯(cuò),所以想著實(shí)現(xiàn)一下,下面這篇文章主要給大家介紹了關(guān)于如何基于Vue3實(shí)現(xiàn)的圖片散落效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04Vue動(dòng)態(tài)組件表格的實(shí)現(xiàn)代碼
這篇文章主要介紹了Vue動(dòng)態(tài)組件表格的實(shí)現(xiàn)代碼,包括框架結(jié)構(gòu)組件,文中還給大家封裝了幾個(gè)組件,有按鈕組件、圖片組件、滑動(dòng)開(kāi)關(guān),結(jié)合示例代碼給大家詳細(xì)講解,需要的朋友可以參考下2022-10-10vue render函數(shù)動(dòng)態(tài)加載img的src路徑操作
這篇文章主要介紹了vue render函數(shù)動(dòng)態(tài)加載img的src路徑操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10