Vue3中使用reactive時,后端有返回?cái)?shù)據(jù)但dom沒有更新的解決
使用reactive時,后端有返回?cái)?shù)據(jù)但dom沒有更新
問題
在Vue3的setup中使用reactive更新數(shù)據(jù),但是dom沒有更新問題
代碼:
<template>
<div class="aside">
<div class="collpase-btn" @click="collpaseMenu">
<el-icon><fold /></el-icon>
</div>
<el-menu
active-text-color="#ffd04b"
background-color="#545c64"
class="el-menu-vertical-demo"
default-active="2"
text-color="#fff"
:collapse="store.state.isCollapse"
@open="handleOpen"
@close="handleClose"
>
<el-sub-menu :index="item.id" v-for="item in menus" :key="item.id">
<template #title>
<el-icon><grid /></el-icon>
<span>{{item.title}}</span>
</template>
<el-menu-item :index="it.id" v-for="it in item.subMenuList">{{it.title}}</el-menu-item>
</el-sub-menu>
</el-menu>
</div>
</template>
<script lang="ts">
import axios from 'axios';
import { defineComponent, onMounted, reactive } from 'vue'
import { useStore } from 'vuex';
export default defineComponent({
name:'Aside',
setup() {
const store = useStore();
const mensList:any = [];
let menus = reactive(mensList);
const handleOpen = (key: string, keyPath: string[]) => {
}
const handleClose = (key: string, keyPath: string[]) => {
};
const collpaseMenu = () => {
store.dispatch('collpaseChange');
};
onMounted(() => {
axios.get('/user/menu').then(res => {
menus.mensList = res.data.menusList;
});
});
return {
handleOpen,
handleClose,
collpaseMenu,
store,
menus
}
},
})
</script>
<style lang="scss" scoped>
.el-menu-item.is-active{
background-color: var(--el-menu-hover-bg-color);;
}
.collpase-btn{
text-align: center;
width: 100%;
padding: 10px 0px;
cursor: pointer;
.el-icon{
color: white;
font-size: 24px;
}
}
</style>
直接使用reactive()一個空數(shù)組,改變當(dāng)前值時,頁面不會自動刷新。
解決辦法
使用reactive時,將參數(shù)變?yōu)橐粋€對象形式,而不是單純的數(shù)組。

當(dāng)改為傳入對象包裹后,頁面正常顯示:

關(guān)于vue3中reactive的意義
在學(xué)習(xí)Vue3的時候產(chǎn)生疑問:
const addForm = reactive({ // 這里面的reactive啥意思
? sysPre: null,
? diaPre: null,
? tem: null
})查詢解決
在Vue3中,響應(yīng)式對象是指通過reactive函數(shù)轉(zhuǎn)換而來的對象,它的屬性可以被Vue自動監(jiān)測,當(dāng)屬性值發(fā)生變化時,Vue會自動更新相關(guān)的視圖。這個過程是通過Vue內(nèi)部實(shí)現(xiàn)的響應(yīng)式系統(tǒng)來完成的。
響應(yīng)式對象的意義在于使得開發(fā)者可以更加方便地管理和操作數(shù)據(jù)。當(dāng)數(shù)據(jù)被轉(zhuǎn)換為響應(yīng)式對象后,我們可以直接修改對象的屬性值,而不需要手動調(diào)用Vue的更新函數(shù)來更新視圖。這樣可以極大地提高開發(fā)效率,讓開發(fā)者更加專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。
此外,響應(yīng)式對象還可以與Vue的模板語法、組件等功能無縫銜接,使得我們可以通過組合使用響應(yīng)式對象和Vue的其他功能,快速開發(fā)出高效、可維護(hù)的應(yīng)用程序。
在這段代碼中,addForm對象被使用reactive函數(shù)轉(zhuǎn)換為一個響應(yīng)式對象。這意味著當(dāng)addForm對象的屬性sysPre,diaPre或tem發(fā)生變化時,相關(guān)的依賴將會自動更新,如綁定在模板中的表單輸入框等。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue項(xiàng)目中向數(shù)組添加元素的3種方式
這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中向數(shù)組添加元素的3種方式,在Vue中添加元素到數(shù)組非常簡單,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue具有一定的參考借鑒價值,需要的朋友可以參考下2023-10-10
vuex頁面刷新導(dǎo)致數(shù)據(jù)丟失的解決方案
這篇文章主要介紹了vuex頁面刷新導(dǎo)致數(shù)據(jù)丟失的解決方案,幫助大家更好的使用vue框架,感興趣的朋友可以了解下2020-12-12
vue本地打開build后生成的dist文件夾index.html問題
這篇文章主要介紹了vue本地打開build后生成的dist文件夾index.html問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友參考下吧2019-09-09
Vue3+Elementplus實(shí)現(xiàn)面包屑功能
這篇文章主要為大家詳細(xì)介紹了Vue3如何結(jié)合Elementplus實(shí)現(xiàn)面包屑功能,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以參考下2023-11-11
Vue組件通信中非父子組件傳值知識點(diǎn)總結(jié)
在本篇文章里小編給大家整理的是關(guān)于Vue組件通信中非父子組件傳值知識點(diǎn)總結(jié),有興趣的朋友們學(xué)習(xí)下。2019-12-12
詳解解決使用axios發(fā)送json后臺接收不到的問題
這篇文章主要介紹了詳解解決使用axios發(fā)送json后臺接收不到的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06

