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