Skip to content
此页目录
本文总阅读量

vue 更改响应式方法、只读属性、标记响应式数据

shallowReactive & shallowRef

js
// shallowReactive 页面渲染只响应外层属性
// shallowRef 只响应 value 级别属性
/* 
 m1.name += '==';
 m1.a.name += '==';
 同时更改页面会响应,因为 m1.name 是外层的
*/
const m1 = shallowReactive({name:'1',a:{name:'4'}})
const m2 = shallowRef({name:'1',a:{name:'2'}})

readonly & shallowReadonly

js
// 深度只读 所有都不能更改
const m1 = readonly({name:'1',a:{name:'2'}})
// 浅只读, 深层次属性可以更改
const m2 = shallowReadonly({name:'1',a:{name:'4'}})

toRaw & markRaw

ts
interface UserInfo {
 name: string;
 age: number;
 likes?: number[];
}

// 页面显示 user
const user = reactive<UserInfo>({
 name: "小明",
 age: 18,
});


const arr = [1, 2];
user.likes = markRaw(arr) // 标记并之后再也无法响应
const upData = () => {
  const raw = toRaw(user); // 将一个响应式数据变为普通对象
 raw.name += "=="; // 界面不会更新
 user.likes && (user.likes[0] += 1) // 不会更新响应
}

评论

交流群