vue3-api之toRaw() 和markRaw()

1、toRaw

        toRaw 方法可以将一个被 reactive 包裹的对象还原为其中的“原始”对象,从而使其不再具有任何响应式能力。这样做可以帮助我们避免某些情况下意外触发了响应式更新或影响了性能等问题。

import { reactive, toRaw } from 'vue'
 
const state = reactive({
  count: 0
})
 
// 获取原始对象
const rawState = toRaw(state)
 
// 验证原始对象与包装后的对象是否相等
console.log(rawState === state) // false
 
// 改变原始对象的值
rawState.count += 1
 
// 验证包装后的对象是否也受到了改变
console.log(state.count) // 1

2、markRaw

        markRaw 方法可以将一个对象标记为“非响应式”,从而使其不会被 reactive 包裹,也就不会成为 Vue3 中的响应式对象。

import { reactive, markRaw } from 'vue'
 
const state = reactive({
  count: 0,
  obj: {
    name: '张三'
  }
})
 
// 标记 obj 对象为“非响应式”
markRaw(state.obj)
 
// obj 对象不再被 reactive 包裹
console.log(state.hasOwnProperty('__v_raw')) // false
 
// 赋新值时不会触发响应更新
state.obj.name = '李四'
console.log(state.obj.name) // 李四

在上述代码中,我们通过 markRaw 方法将 state.obj 标记为非响应式对象。这样做可以避免对 obj 的修改引起意外的响应式更新。

        需要注意的是,一旦一个对象被标记为“非响应式”,它就无法再被 reactive 进行包裹成为响应式对象。所以在使用 markRaw 方法时,我们需要确保这个对象在后续的代码中不需要作为响应式对象来使用或者监听其变化。

toRaw 和 markRaw 是两个很有用的 API,在 Vue3 开发中经常会用到。

toRaw 可以帮助我们还原数据并避免意外的响应式行为

markRaw 则可以让我们更加精细地控制哪些对象使用响应式并避免出现问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值