当前位置: 首页 > article >正文

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

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

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

let userHouseList = reative<HouseListInter>([])

在表单中使用

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

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

// 分页查询
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 的响应式跟踪是通过属性访问实现的,因此我们必须始终保持对响应式对象的相同引用。这意味着我们不能轻易地“替换”响应式对象,因为这样的话与第一个引用的响应性连接将丢失:

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

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

  • 使用ref可以解决

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

       赋值的时候调用.value

    userHouseList.value = res.data.list


http://www.kler.cn/a/313170.html

相关文章:

  • 执行flink sql连接clickhouse库
  • 基于海思soc的智能产品开发(两个图像处理来源)
  • 深度学习——优化算法、激活函数、归一化、正则化
  • Axure设计之文本编辑器制作教程
  • 前端:块级元素和行内元素
  • vue2+ element ui 集成pdfjs-dist
  • gin配置swagger文档
  • 树与图的深度优先遍历(dfs的图论中的应用)
  • 【CPP】类与继承
  • [原创]全新安装最新版Delphi 12.2之前, 如何正确卸载旧版Delphi 12.1?
  • 谈对象第二弹: C++类和对象(中)
  • SQLiteHelper
  • Java:List<String> 转换List<BigDecimal> 并求和
  • Hadoop-MapReduce的 原理 | 块和片 | Shuffle 过程 | Combiner
  • go 战略
  • Observability:构建下一代托管接入服务
  • Linux文件IO(四)-返回错误处理与errno详解
  • 【数据结构与算法】LeetCode:双指针法
  • 基于STM32F103C8T6单片机的DDS信号源设计
  • 海洋大地测量基准与水下导航系列之二国外海底大地测量基准和海底观测网络发展现状(上)
  • mac中git操作账号的删除
  • 【linux】4张卡,坏了1张,怎么办?
  • ActivityManagerService Activity的启动流程(2)
  • Windows10、CentOS Stream9 环境下安装kafka_2.12-3.6.2记录
  • Oracle数据库pl/sql显式抛出异常
  • Python 项目实践:文件批量处理