Vue3:reactive丢失响应式,数据有更新但表单没有更新

news/2024/9/21 4:25:50 标签: 前端, javascript, 开发语言

出现问题:数据有更新但表单没有更新

使用reative定义了一个数组对象

javascript">let userHouseList = reative<HouseListInter>([])

在表单中使用

javascript">    <el-table :data="userHouseList" stripe border style="width: 100%" height="500">

 通过分页展示数据,分页查询会触发查询并将结果赋值给数组对象

javascript">// 分页查询
const pageUserHouseList = () => {
    queryData.value.pageNum = currentPage.value
    queryData.value.pageSize = pageSize.value
    pageUserHouse(queryData.value).then((res) => {
        userHouseList = res.data.list
        total.value = res.data?.total
    })
}

const handleSizeChange = (newSize: number) => {
    pageSize.value = newSize;
    pageUserHouseList();
};

const handleCurrentChange = (newPage: number) => {
    currentPage.value = newPage;
    pageUserHouseList();
};

通过进行console.log输出,发现成功将查询的数据赋值了,但表单并没有更新。

解决:查看了官方文档,发现reative响应式存在局限

reative() API 有一些局限性:

  1. 有限的值类型:它只能用于对象类型 (对象、数组和如 MapSet 这样的集合类型)。它不能持有如 string、number或 boolean这样的原始类型。

  2. 不能替换整个对象:由于 Vue 的响应式跟踪是通过属性访问实现的,因此我们必须始终保持对响应式对象的相同引用。这意味着我们不能轻易地“替换”响应式对象,因为这样的话与第一个引用的响应性连接将丢失:

    javascript">let state = reactive({ count: 0 })
    
    // 上面的 ({ count: 0 }) 引用将不再被追踪
    // (响应性连接已丢失!)
    state = reactive({ count: 1 })
  3. 对解构操作不友好:当我们将响应式对象的原始类型属性解构为本地变量时,或者将该属性传递给函数时,我们将丢失响应性连接:

    javascript">const state = reactive({ count: 0 })
    
    // 当解构时,count 已经与 state.count 断开连接
    let { count } = state
    // 不会影响原始的 state
    count++
    
    // 该函数接收到的是一个普通的数字
    // 并且无法追踪 state.count 的变化
    // 我们必须传入整个对象以保持响应性
    callSomeFunction(state.count)
  • 由于这些限制,我们建议使用 ref() 作为声明响应式状态的主要 API。

  • 使用ref可以解决

  • javascript">let userHouseList = ref<HouseListInter>([])

       赋值的时候调用.value

    javascript">userHouseList.value = res.data.list


http://www.niftyadmin.cn/n/5668134.html

相关文章

Python Web 开发中的国际化与本地化处理

Python Web 开发中的国际化与本地化处理 目录 &#x1f30d; Flask中的国际化与本地化处理&#x1f310; Django中的国际化与本地化处理&#x1f5e3;️ 多语言支持与翻译系统实现&#x1f552; 时区和日期的本地化处理 1. &#x1f30d; Flask中的国际化与本地化处理 Flask…

文件批量添加水印和密码合并单元格完整版

这段代码是一个 Java 方法&#xff0c;用于向文件添加水印和密码。您解释一下&#xff1a; 首先&#xff0c;它接受一个 fileAddress 参数&#xff0c;表示文件的地址。 然后&#xff0c;它创建了一个线程安全的列表 fileDatas&#xff0c;用于存储文件数据。 接下来&#xff…

NFT Insider #148:The Sandbox 推出 SHIBUYA Y3K 时尚系列,Azuki 进军动漫 NFT 领域

市场数据 加密艺术及收藏品新闻 Infinex 新推 NFT 系列首四日销售额破4000万美元 尽管顶级 NFT 系列表现不佳&#xff0c;Infinex 的最新 NFT 系列在首四日内销售额已超过 4000 万美元。Infinex 是一个非托管平台&#xff0c;提供轻松访问链上协议和 dApp。 Infinex Core 的…

5G 扬帆新质跃,技术蝶变开新篇-第七届“绽放杯”5G应用征集大赛 5G应用融合技术专题赛圆满收官

2024年9月13日,由中国信息通信研究院、中国电信集团有限公司、中国移动通信集团有限公司、中国联合网络通信集团有限公司主办,5G应用产业方阵承办的第七届“绽放杯”5G应用征集大赛  5G应用融合技术专题赛决赛在深圳成功举办。 本次专题赛以“5G扬帆新质跃,技术蝶变开新篇”为…

Python学习的主要知识框架

Python的主要学习知识点非常广泛且深入&#xff0c;但我可以为您概括一些核心的学习领域&#xff0c;帮助您系统地掌握Python编程。以下是Python学习的主要知识框架&#xff1a; 1. Python基础语法 数据类型&#xff1a;整数、浮点数、字符串、布尔值、列表、元组、字典、集合…

Android文件系统的结构及目录用途、操作方法

Android文件系统的结构可以分为以下几个主要目录&#xff1a; /system&#xff1a;该目录包含Android操作系统核心文件&#xff0c;例如系统应用程序和库文件。一般情况下&#xff0c;此目录只能读取&#xff0c;无法写入。 /data&#xff1a;该目录用于存储应用程序的数据&am…

网站性能优化:如何高效预加载大型静态资源

网站性能优化&#xff1a;如何高效预加载大型静态资源 在开发中&#xff0c;面对大型文件&#xff0c;尤其是涉及炫酷动效的场景&#xff0c;如何高效加载资源是提升用户体验的关键。针对大文件的加载优化&#xff0c;推测性加载机制可以显著提高网页的响应速度和流畅度。本文…

web worker使用

1. 新建worker.js import kriging from "/views/Heatmap/kriging";self.onmessage (e) > {console.log(e) // 主线程传过来的数据self.postMessage(我是子线程的数据) // 返回给主线程的数据 }2. 在使用的文件引入woker.js 注&#xff1a; 在worker中如果要使用…