位置: IT常识 - 正文

解决在vue3中使用reactive响应式,赋值后造成页面不改变的问题?(vue3 $bus)

编辑:rootadmin
解决在vue3中使用reactive响应式,赋值后造成页面不改变的问题? 文章目录场景原因一、例子二、解决方法1、使用ref存储响应式数据2、在reactive中使用对象包裹要改变的数据3、for of循环push到reactive数据中,不破坏数据结构总结场景原因

推荐整理分享解决在vue3中使用reactive响应式,赋值后造成页面不改变的问题?(vue3 $bus),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue3技巧,vue3 onmounted,vue3解决了什么问题,在使用vue碰到的坑,vue3解决了什么问题,在使用vue碰到的坑,vue3解决了什么问题,在使用vue碰到的坑,内容如对您有帮助,希望把文章链接给更多的朋友!

我们需要在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>解决在vue3中使用reactive响应式,赋值后造成页面不改变的问题?(vue3 $bus)

我们通过直接赋值,可以看出数据变为普通的数据了,并不是响应式的。

二、解决方法1、使用ref存储响应式数据

代码如下:

<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劫持的数据,是响应式的。

2、在reactive中使用对象包裹要改变的数据

代码如下:

<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>

使用这种方式,数据也是响应式的。

3、for of循环push到reactive数据中,不破坏数据结构

代码如下:

<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>

总结

主要的问题就是使用reactive生成的响应式数据,在直接赋值时把响应式数据给替换为了普通数据了,导致无法监听数据的变化。

本文链接地址:https://www.jiuchutong.com/zhishi/300223.html 转载请保留说明!

上一篇:Vue 国际化之 vue-i18n 的使用(vue国际化占位符)

下一篇:PyTorch学习系列教程:何为Tensor?(pytorch如何学)

  • 个人所得税网上申报
  • 如何成为一般纳税人的条件
  • 小规模纳税人税费会计分录
  • 加计抵减税额账务处理
  • 购买的二手车可以抵扣进项税额吗
  • 跨期差额扣除的计算开票以及账务处理
  • 企业会计制准下增值税科目的核算
  • 个人股东之间股权转让的溢价账务处理
  • 企业购房税费政策
  • 承包经营承包费增值税
  • 代扣代缴的增值税怎么做账
  • 财产租赁所得个人所得税计算方法2020
  • 合伙企业需要交企业所得税吗?
  • 怎么看增值税专用发票是进项还是销项
  • 小规模纳税人查账征收所得税税率
  • 可以对开发票吗
  • 普通发票红字冲销,需要退回原发票吗
  • 个人开机械租赁发票需要什么
  • 减税降费各项政策
  • 转让无形资产所有权计入什么科目
  • 财政总预算会计分为三级
  • 缴纳房产税怎么办理登记手续
  • linux 使用u盘
  • 企业出租经营权是否征税
  • 浅谈使用链式管理加强特殊监管场所
  • 动态壁纸怎么设置锁屏
  • 不良修复体的危害
  • 公司为员工缴纳社保的基数怎么确定
  • 入固定资产含税吗
  • 广告费增值税税目是什么
  • 多对账工作的主要内容
  • PHP:mcrypt_module_self_test()的用法_Mcrypt函数
  • 股权转让有溢价怎么做账
  • 购买税控盘后要交税吗
  • php多条件搜索功能的实现
  • 数字图像处理-应用篇
  • 图文详解一本通
  • 保安行业税率是多少
  • Vue Element UI 中 el-table 树形数据 tree-props 多层级使用避坑
  • vue父组件子组件
  • ubuntu搭建web服务器流程
  • vue的常见面试题
  • 若依框架前端改造
  • 升级到miui14感觉耗电快了
  • 利润表净利润等于未分配利润吗
  • dede织梦怎么转成zblog
  • 海关进口增值税专用缴款书如何抵扣
  • 所得税汇算清缴调整项目
  • 小规模纳税人销售商品会计分录
  • 扶贫款分红怎么做账
  • sql server row_number over
  • 水利基金差额征收有哪些类型
  • 用mysql的小技巧
  • 公司车辆过户给个人需要多少费用
  • 缴纳的工会经费现金流量表怎么记
  • 固定资产的认定标准2022
  • 增值税进项税转出有哪些
  • 企业销售退回的论文
  • 社保费申报是当月的
  • 完全成本法作业成本法变动成本法对企业的影响
  • sql server数据库中的null(空值)
  • mysql5.5.62安装配置教程
  • 微软出win9了吗
  • 桌面快捷方式不显示图标怎么办
  • storm run off
  • linux挂起
  • sointgr.exe - sointgr是什么进程 有什么用
  • SonicStageMonitoring.exe是什么进程 有什么作用
  • hottray.exe是什么进程 有什么作用 hottray进程查询
  • centos 安装
  • linux ii
  • python如何配置
  • javascript html5摇一摇功能的实现
  • 安卓环境搭建id怎么设置
  • JavaScript中的变量名不区分大小写
  • android如何使用
  • 苏州税务所电话是多少
  • 即征即退进项税额分摊方法
  • 福建税务局电子
  • 税票电话号码变更影响抵扣吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设