Vue3中使用reactive時(shí),后端有返回?cái)?shù)據(jù)但dom沒有更新的解決
使用reactive時(shí),后端有返回?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()一個(gè)空數(shù)組,改變當(dāng)前值時(shí),頁面不會(huì)自動(dòng)刷新。
解決辦法
使用reactive時(shí),將參數(shù)變?yōu)橐粋€(gè)對象形式,而不是單純的數(shù)組。
當(dāng)改為傳入對象包裹后,頁面正常顯示:
關(guān)于vue3中reactive的意義
在學(xué)習(xí)Vue3的時(shí)候產(chǎn)生疑問:
const addForm = reactive({ // 這里面的reactive啥意思 ? sysPre: null, ? diaPre: null, ? tem: null })
查詢解決
在Vue3中,響應(yīng)式對象是指通過reactive函數(shù)轉(zhuǎn)換而來的對象,它的屬性可以被Vue自動(dòng)監(jiān)測,當(dāng)屬性值發(fā)生變化時(shí),Vue會(huì)自動(dòng)更新相關(guān)的視圖。這個(gè)過程是通過Vue內(nèi)部實(shí)現(xiàn)的響應(yīng)式系統(tǒng)來完成的。
響應(yīng)式對象的意義在于使得開發(fā)者可以更加方便地管理和操作數(shù)據(jù)。當(dāng)數(shù)據(jù)被轉(zhuǎn)換為響應(yīng)式對象后,我們可以直接修改對象的屬性值,而不需要手動(dò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)換為一個(gè)響應(yīng)式對象。這意味著當(dāng)addForm對象的屬性sysPre,diaPre或tem發(fā)生變化時(shí),相關(guān)的依賴將會(huì)自動(dòng)更新,如綁定在模板中的表單輸入框等。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue從一個(gè)頁面跳轉(zhuǎn)到另一個(gè)頁面并攜帶參數(shù)的解決方法
這篇文章主要介紹了vue從一個(gè)頁面跳轉(zhuǎn)到另一個(gè)頁面并攜帶參數(shù)的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08vue動(dòng)態(tài)綁定圖標(biāo)的完整步驟
動(dòng)態(tài)綁定是我們?nèi)粘i_發(fā)中經(jīng)常遇到的一個(gè)需求,下面這篇文章主要給大家介紹了關(guān)于vue動(dòng)態(tài)綁定圖標(biāo)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-05-05在vue中路由使用this.$router.go(-1)返回兩次問題
這篇文章主要介紹了在vue中路由使用this.$router.go(-1)返回兩次問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Vue封裝數(shù)字框組件實(shí)現(xiàn)流程詳解
這篇文章主要介紹了Vue封裝數(shù)字框組件實(shí)現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-04-04解決Vite無法分析出動(dòng)態(tài)import的類型,控制臺出警告的問題
這篇文章主要介紹了解決Vite無法分析出動(dòng)態(tài)import的類型,控制臺出警告的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03關(guān)于vue利用postcss-pxtorem進(jìn)行移動(dòng)端適配的問題
這篇文章主要介紹了關(guān)于vue利用postcss-pxtorem進(jìn)行移動(dòng)端適配的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11vue如何通過props方式在子組件中獲取相應(yīng)的對象
這篇文章主要介紹了vue如何通過props方式在子組件中獲取相應(yīng)的對象,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04