这篇文章主要介绍了Vue函数toRaw和markRaw如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue函数toRaw和markRaw如何使用文章都会有所收获,下面我们一起来看看吧。toRaw()函数
这篇文章主要介绍了Vue函数toRaw和markRaw如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue函数toRaw和markRaw如何使用文章都会有所收获,下面我们一起来看看吧。
接收一个Reactive
响应式数据,将一个响应式的数据变为普通类型的数据,转化为非响应式数据,相当于还原对象,reactive
相当于制作,但对于ref
响应式数据不起作用
将一个由reactive
生成的响应式对象转为普通(原始)对象
toRaw()
可以返回由reactive()
,readonly()
,shallowReactive()
或shallowReadonly()
创建的代理对应的原始对象
这是一个可以用临时读取而不引起代理访问/跟踪开销,或是写入而不触发更改的特殊方法,在官方文档里,是不建议保存对原始对象的持久引用
使用场景:用于读取响应式对象的普通对象,对这个普通对象的所有操作,不会引起页面的更新
const foo = {}const reactiveFoo = reactive(foo)console.log(toRaw(reactiveFoo) === foo) // true
注意
针对对象,后续动态新增的属性,如果没有把整个对象对外暴露出去,模板中使用新增的变量是不生效的(针对setup
函数形式)
接收一个原始数据,标记一个对象,使它永远不会再成为响应式对象,也就是数据在逻辑中即使修改变化了,但是页面不会更新变化
将一个对象标记为不可被转为代理,返回该对象本身
应用场景:
[1]. 有些值不应该被设置为响应式的,例如复杂的第三方类库或Vue
组件对象
[2]. 当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能
const foo = markRaw({})console.log(isReactive(reactive(foo))) // false// 也适用于嵌套在其他响应性对象const bar = reactive({ foo })console.log(isReactive(bar.foo)) // false
markRaw()
与shallowReactive()
这样浅层式api
使你可以有选择的避开默认的深度响应/只读转换,并在状态关系谱中嵌入原始,非代理的对象
如果把一个嵌套的,没有标记的原始对象设置成一个响应式对象,然后再次访问它,你获取到的是代理的版本,这可能会导致对象身份风险
即执行一个依赖于对象身份的操作,但却同时使用了同一对象的原始版本和代理版本
const foo = markRaw({ nested: {}})const bar = reactive({ // 尽管 `foo` 被标记为了原始对象,但 foo.nested 却没有 nested: foo.nested})console.log(foo.nested === bar.nested) // false
关于“vue函数toRaw和markRaw如何使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“vue函数toRaw和markRaw如何使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。
--结束END--
本文标题: vue函数toRaw和markRaw如何使用
本文链接: https://lsjlt.com/news/354869.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0