您好,登錄后才能下訂單哦!
這篇文章主要介紹了vue3使用reactive賦值后頁面不改變怎么解決的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇vue3使用reactive賦值后頁面不改變怎么解決文章都會有所收獲,下面我們一起來看看吧。
我們需要在vue3中使用服務器的數據渲染到頁面上,我使用的是reactive生成的響應式數據屬性,但是在掛載后請求的數據并沒有渲染顯示到頁面上。
技術:
vue3
、element-ui-plus
home.vue
<template> <div class="common-layout"> <el-menu @select="changeMenu" :collapse="isCollapse" active-text-color="#409eff" background-color="#333744" class="el-menu-vertical-demo" default-active="2" text-color="#fff" :unique-opened="true"> <el-sub-menu :index="item.path" v-for="(item) in parmar.menus" :key="item.id"> <template #title> <el-icon> <List /> </el-icon> <span>{{ item.authName }}</span> </template> <el-menu-item :index="item2.path" v-for="(item2) in item.children" :key="item2.id"> <el-icon> <Menu /> </el-icon> {{ item2.authName }} </el-menu-item> </el-sub-menu> </el-menu> </div> </template> <script setup> // 引入模塊 import { reactive, onMounted } from 'vue' import { useRouter } from 'vue-router' import http from '@/utils/request' const router = useRouter(); let menusList = reactive([ ]); onMounted(() => { getData() }) const getData = async () => { let { data } = await http.get('/menus'); // 這里直接賦值,會導致menusList失去響應式了 menusList = data.data; console.log(menusList); } const changeMenu = (key) => { router.push('/home/' + key) } </script> <style lang="less" scoped> .common-layout { height: 100vh; box-sizing: border-box; position: relative; overflow: hidden; /deep/.el-menu--vertical { margin: 0; border-right: none !important; overflow-x: hidden; height: calc(100vh - 100px); user-select: none; } .el-menu-vertical-demo:not(.el-menu--collapse) { width: 200px; min-height: 400px; } } </style>
我們通過直接賦值,可以看出數據變為普通的數據了,并不是響應式的。
代碼如下:
<script setup> // 引入模塊 import { ref, reactive, onMounted } from 'vue' import http from '@/utils/request' let menusList = ref([ ]); onMounted(() => { getData() }) const getData = async () => { let { data } = await http.get('/menus'); // 這里直接賦值value,在頁面上直接使用menusList即可! menusList.value = data.data; } </script>
可以看出打印出的數據是經過ref劫持的數據,是響應式的。
代碼如下:
<script setup> // 引入模塊 import { reactive, onMounted } from 'vue' import http from '@/utils/request' let parmar = reactive({ menus: [ ] }); onMounted(() => { getData() }) const getData = async () => { let { data } = await http.get('/menus'); // 這里直接賦值對象里面的數據,就不會造成把響應式替換掉的情況了,直接在頁面上通過parmar.menus使用數據! parmar.menus = data.data; console.log( parmar); } </script>
使用這種方式,數據也是響應式的。
代碼如下:
<script setup> // 引入模塊 import { reactive, onMounted } from 'vue' import http from '@/utils/request' let menusList = reactive([]) onMounted(() => { getData() }) const getData = async () => { let { data } = await http.get('/menus'); for (let i of data.data){ menusList.push(i); } console.log(menusList); } </script>
關于“vue3使用reactive賦值后頁面不改變怎么解決”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“vue3使用reactive賦值后頁面不改變怎么解決”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。