Vue3中readonly 和 shallowReadonly和toRaw
1.readonly 深度只读
被readonly包裹的数据只能够读取。
是一个深度只读,不能够修改。
我们看一下面的代码。
我们想修改值,但是修改后视图无响应。
并且控制台警告目标为只读
readonly深度只读的应用场景:
比如我们登录后用户信息不会发生改变了。
<template>
<div>
<div>
<div>{{viewSate}}</div>
<button @click="func1">按钮</button>
</div>
</div>
</template>
<script>
import { reactive,readonly} from 'vue'
export default {
name: 'App',
setup(){
let state=reactive({
name:"张三",
age:20,
sex:"男"
})
// viewSate这个数据只能够读取
// 是一个深度只读,不能够修改
let viewSate=readonly(state)
function func1(){
viewSate.name="李四"
}
return {viewSate,func1}
},
}
</script>
2. shallowReadonly 浅只读
shallowReadonly中放了一个对象,
对象中直接属性是不可以修改的;
如果对象下的属性下还有对象,
那么这个对象下的属性就可以修改的.
<template>
<div>
<div>
<div>{{viewSate}}</div>
<button @click="func1">按钮</button>
</div>
</div>
</template>
<script>
import { reactive,shallowReadonly} from 'vue'
export default {
name: 'App',
setup(){
let state=reactive({
name:"张三",
age:20,
info:{
h:1.90,
w:'64kg'
}
})
// shallowReadonly 浅只读
// shallowReadonly中放了一个对象,对象中的直接属性是不可以修改的;
// 如果对象下的属性下还有对象。那么这个对象下的属性就可以修改的
let viewSate=shallowReadonly(state)
function func1(){
// 修改失败
// viewSate.name="李四"
// 修改成功
viewSate.info.w="128斤"
}
return {viewSate,func1}
},
}
</script>
3 toRaw将代理对象变成普通对象
toRaw将代理对象变成普通对象。
这个时候我们的数据已经不再是响应式的数据了。
所以修改普通对象的时候,
虽然数据发生变化了,
但是视图将不会更新。
<template>
<div>
<div>
<div>{{state}}</div>
<button @click="func1">按钮</button>
</div>
</div>
</template>
<script>
import { reactive,toRaw} from 'vue'
export default {
name: 'App',
setup(){
let state=reactive({
name:"张三",
age:20,
})
// toRaw将代理对象变成普通对象
let viewSate=toRaw(state)
function func1(){
viewSate.age=40;
console.log(state);// Proxy {name: "张三", age: 40}
console.log(viewSate);//{name: "张三", age: 40}
}
return {state,func1}
},
}
</script>
Vue3中readonly 和 shallowReadonly和toRaw的更多相关文章
- Vue3中的响应式api
一.setup文件的认识 特点1:script 中间的内容就是一个对象 特点2:script 在第一层 定义的方法 或者 变量 => 就是这个对象 属性 => 顶层的绑定回被暴露给模板( ...
- Vue3中的响应式对象Reactive源码分析
Vue3中的响应式对象Reactive源码分析 ReactiveEffect.js 中的 trackEffects函数 及 ReactiveEffect类 在Ref随笔中已经介绍,在本文中不做赘述 本 ...
- 关于C#中readonly
关于C#中readonly的一点小研究 关于C#中readonly的一点小研究 可能园子里有不少文章已经说明了这个问题了,但是我在这里写这篇博客只是写写自己的一些体会,也权当是整理归纳,高手莫见笑 ...
- 对C# 中Readonly的再认识
C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景. 工作原理 readonly为运行时常量,程序运行 ...
- vue3中使用axios如何去请求数据
在vue2中一般放在created中,但是在vue3中取消了created生命周期,请求方式有两种 直接在setup中去获取数据 setup(props) { const data = reactiv ...
- vue3中watch函数
watch 监听普通类型 let count = ref(1); const changeCount = () => { count.value+=1 }; watch(count, (newV ...
- 端午总结Vue3中computed和watch的使用
1使用计算属性 computed 实现按钮是否禁用 我们在有些业务场景的时候,需要将按钮禁用. 这个时候,我们需要使用(disabled)属性来实现. disabled的值是true表示禁用.fals ...
- vue 3 学习笔记 (七)——vue3 中 computed 新用法
vue3 中 的 computed 的使用,由于 vue3 兼容 vue2 的选项式API,所以可以直接使用 vue2的写法,这篇文章主要介绍 vue3 中 computed 的新用法,对比 vue2 ...
- 在vue3中使用router-link-active遇到的坑
在使用 router-link-active 设置链接激活时CSS类名时,发现在例如 /member/order 和 /member/order/:id 这两个都包含 /member/order的路由 ...
- Vue3中插槽(slot)用法汇总
Vue中的插槽相信使用过Vue的小伙伴或多或少的都用过,但是你是否了解它全部用法呢?本篇文章就为大家带来Vue3中插槽的全部用法来帮助大家查漏补缺. 什么是插槽 简单来说就是子组件中的提供给父组件使用 ...
随机推荐
- 初探语音识别ASR算法
摘要:语音转写文字ASR技术的基本概念与数学原理简介. 本文分享自华为云社区<新手语音入门(三): 语音识别ASR算法初探 | 编码与解码 | 声学模型与语音模型 | 贝叶斯公式 | 音素> ...
- 登录appuploader
转载:登录appuploader 常规使用登录方法 双击appuploader.exe 启动appuploader 点击底部的未登录,弹出登录框 在登录框内输入apple开发者账号 如果没有app ...
- 抓包工具 Fiddler 抓取 exe 包
浏览器访问网页,可以使用 Fiddler 直接抓去,如果是 exe的客户端,可以借助 Proxifier 工具 设置完成后,添加代理规则,排除fiddler,也就是让fiddler进行网络直连.不然f ...
- Python 批量制作缩略图
本来想网上下个软件处理下的,给我加了水印,不然就让我升会员,程序员都是薅人家羊毛,哪能被人家薅羊毛 1. 安装组件 (指定国内源,速度快些),带上版本号,最新版本会卡在 XXX(PEP 517) 上. ...
- Jmeter对各种接口类型的测试
JMeter对各种类型接口的测试 默认做接口测试前,已经给出明确的接口文档(如,http://test.nnzhp.cn/wiki/index.php?doc-view-59):本地配好了JMeter ...
- js将页面上取得的元素坐标转换为电脑屏幕坐标
代码: <!DOCTYPE html> <html> <head> <title>计算屏幕坐标</title> <meta chars ...
- #2035:人见人爱A^B
实现代码 #include<iostream> using namespace std; int main() { int n, m, t; while (cin >> n & ...
- vue学习笔记 十三、路由介绍
系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...
- echarts自定义legend样式
https://blog.csdn.net/changyana/article/details/126281275
- confiparse遇到特殊字符的解析处理
一.背景:confiparse类解析mysql密码时发现包含特殊字符时出现报错的情况:配置文件如下: 代码如下: import configparser import os #读取配置 conf=co ...