位置: IT常识 - 正文

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

发布时间:2024-01-17
解决在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如何学)

  • 辅导期增值税一般纳税人是什么意思
  • 简易计税方法和免税该怎么选择
  • 资产负债表里的应收账款怎么取数
  • 工程劳务费计入哪个会计科目
  • 业务招待费可以进成本吗
  • 报税时提示缺少相关组件怎么解决
  • 微企怎么申请补贴
  • 如何在电子税务局开发票
  • 哪些项目容易漏缴个人所得税
  • 冲销暂估材料怎么做账
  • 通行费电子增值税怎么算
  • 宣传费税前扣除标准
  • 证券公司转让价格
  • 补偿金超过平均工资三倍
  • 成本费用怎么做分录
  • 出口退税款计入收入总额吗
  • 双软企业两免三减半企业所得税优惠政策
  • 折扣返利怎么做会计分录
  • 企业职工福利有哪些
  • 小规模纳税人增值税税收优惠政策
  • 年末利润分录
  • win11系统摄像头黑屏
  • 阿拉斯加州zip
  • 挂证不付工资只代缴社保账务处理
  • 采用销售百分比法预测对外
  • win11dev预览版可以升级正式版吗
  • 路由器wds桥接成功为什么不能上网
  • 工资薪金支出税前扣除
  • pytorch model.module
  • php发送短信
  • php 集成环境
  • 关于企业财务会计的说法正确的是
  • java web购物系统
  • php分层架构
  • 若依框架前端发请求
  • 社保新参统委托代发银行
  • python类 方法
  • 简易注销公示后怎么操作
  • 社保基数怎么申请下调
  • 帝国cms使用手册
  • 资本性支出与资本性支出(基本建设)的区别
  • 资产是指()
  • 营改增后企业所得税是国税还是地税
  • 本年利润借方余额是什么意思呢
  • mysql数据库访问速度慢的解决方法
  • 材料成本差异的会计分录
  • 固定资产净残值可以为0吗
  • 金税盘锁死341101
  • 餐费开增值税专用发票
  • 实收资本后面带人名吗
  • 筹建期间取得的利息收入 企业所得税
  • 非流动资产基金对应的新科目
  • 管理费用和销售费用都有职工薪酬
  • 应当设置会计机构的单位有
  • 如何设置固定资产的部门对应这就
  • 被遗忘的事件
  • mysql数据库中文
  • 用命令创建文件夹
  • Virtualbox共享文件
  • mac用chrome
  • window 删除服务
  • win7系统误删文件可以恢复吗
  • kotlin开发教程
  • nodejs截图
  • javascript的基本规范
  • js传参数有长度限制
  • Error: String types not allowed (at 'layout_gravity' with value 'bottom/center_horizontal').
  • 批处理界面
  • python标准库os中的方法
  • bootstrap基础教程
  • 抛物线动画演示视频
  • Linux 中常用的几种压缩工具?
  • jquery中选择器有哪些
  • 税务局收垃圾处置费
  • 全国退休人员有几多人
  • 怎么代理保险业务
  • 烟酒税收占比
  • 江苏税务局电子
  • 物业优质服务我们在行动
  • 怎么修改税局预留号码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号