vue3 中 使用reactive,数组没有响应

内容来自于: https://vue3.chengpeiquan.com/component.html#变量的读取与赋值-1

如果你使用常规的重置,会导致这个变量失去响应性:

复制代码
 1 /** 
 2  * 不推荐使用这种方式
 3  * 异步添加数据后,模板不会响应更新
 4  */
 5 let uids: number[] = reactive([ 1, 2, 3 ]);
 6 
 7 // 丢失响应性的步骤
 8 uids = [];
 9 
10 // 异步获取数据后,模板依然是空数组
11 setTimeout( () => {
12   uids.push(1);
13 }, 1000);
复制代码

 

要让模板那边依然能够保持响应性,则必须在关键操作时,不破坏响应性 API 的存在。

复制代码
 1 /** 
 2  * 不推荐使用这种方式
 3  * 异步添加数据后,模板不会响应更新
 4  */
 5 let uids: number[] = reactive([ 1, 2, 3 ]);
 6 
 7 // 不会破坏响应性
 8 uids.length = 0;
 9 
10 // 异步获取数据后,模板可以正确的展示
11 setTimeout( () => {
12   uids.push(1);
13 }, 1000);
复制代码

 

特别注意

不要对通过 reactive 定义的对象进行解构,解构后得到的变量会失去响应性。

比如这些情况,在 2s 后都得不到新的 name 信息:

复制代码
 1 import { defineComponent, reactive } from 'vue'
 2 
 3 interface Member {
 4   id: number,
 5   name: string
 6 };
 7 
 8 export default defineComponent({
 9   setup () {
10 
11     // 定义一个带有响应性的成员对象
12     const userInfo: Member = reactive({
13       id: 1,
14       name: 'Petter'
15     });
16 
17     // 2s后更新userInfo
18     setTimeout( () => {
19       userInfo.name = 'Tom';
20     }, 2000);
21 
22     // 这个变量在2s后不会同步更新
23     const newUserInfo: Member = {...userInfo};
24 
25     // 这个变量在2s后不会再同步更新
26     const { name } = userInfo;
27 
28     // 这样return出去给模板用,在2s后也不会同步更新
29     return {
30       ...userInfo
31     }
32   }
33 })
复制代码

 

 

posted @   googlegis  阅读(2399)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!

坐标合肥,非典型GIS开发人员 GitHub

点击右上角即可分享
微信分享提示