【Vue3重点概念总结和实践二】(watch / props / toRaw / makeRaw)

news/2024/11/7 14:34:16/

目录

1、watch全家桶

2、Prop验证

3、原始值API

4、Vue3 + Vue-cli (1) 基础篇

5、Vue3+ Vue-cli (2) 组件篇


1、watch全家桶

原题: 

vuejs-challenges/README.zh-CN.md at main · webfansplz/vuejs-challenges · GitHub

答案:

watch() 默认是懒侦听的,即仅在侦听源发生变化时才执行回调函数。 

stop()  停止侦听器

deep: true  强制侦听器进入深层级模式

flush:  'post'  调整回调函数的刷新时机

<script setup>
import { ref, watch } from 'vue'
const count = ref(0)/*** 挑战 1: Watch 一次* 确保副作用函数只执行一次*/
const stop = watch(count, () => {console.log('Only triggered once')stop()
})
count.value = 1
setTimeout(() => (count.value = 2))/*** 挑战 2: Watch 对象* 确保副作用函数被正确触发*/
const state = ref({count: 0
})
// 当使用getter函数作为源时,回调只在此函数的返回值变化时才会触发。
// 如果你想让回调在深层级变更时也能触发,你需要使用 { deep: true } 强制侦听器进入深层级模式。
// 在深层级模式时,如果回调函数由于深层级的变更而被触发,那么新值和旧值将是同一个对象。
watch(state,() => {console.log('The state.count updated')
},{ deep: true} )
state.value.count = 2/*** 挑战 3: 副作用函数刷新时机* 确保正确访问到更新后的`eleRef`值*/
// 当你更改了响应式状态,它可能会同时触发Vue组件更新和侦听器回调。
// 默认情况下,用户创建的侦听器回调,都会在Vue组件更新之前被调用。
// 这意味着你在侦听器回调中访问的 DOM 将是被 Vue 更新之前的状态。
// 如果想在侦听器回调中能访问被 Vue 更新之后的 DOM,你需要指明 flush: 'post' 选项
const eleRef = ref()
const age = ref(2)
watch(age,() => { console.log(eleRef.value) }, { flush: 'post' })
age.value = 18
</script><template><div><p>{{ count }}</p><p ref="eleRef">{{ age }}</p></div>
</template>

文档:

 响应式 API:核心 | Vue.js

2、Prop验证

原题: 

请验证Button组件的Prop类型 ,使它只接收: primary | ghost | dashed | link | text | default ,且默认值为default

vuejs-challenges/README.zh-CN.md at main · webfansplz/vuejs-challenges · GitHub

答案:

<script setup>
defineProps({type: {type: String,default:'default',validator(value) {return ['primary', 'ghost', 'dashed' ,'link' ,'text','default'].includes(value)}}
})
</script><template><button>Button</button>
</template>

3、原始值API

原题: 

vuejs-challenges/README.zh-CN.md at main · webfansplz/vuejs-challenges · GitHub

答案:

toRaw() 可以返回由 reactive()、readonly()、shallowReactive() 或者 shallowReadonly() 创建的代理对应的原始对象。

toRaw 可以将 proxy转成原始对象,raw表示未加工的。

 makeRaw() 将一个对象标记为不可被转为代理。返回该对象本身。

<script setup>
import { reactive, isReactive, toRaw, markRaw } from 'vue'const state = { count: 1 }
const reactiveState = reactive(state)/**
* 修改以下代码使输出为true
*/
// console.log(reactiveState === state)
console.log('修改以下代码使输出为true', toRaw(reactiveState) === state)/*** 修改以下代码使输出为false*/
// const info = { count: 1 }
const info = markRaw({ count: 1 })
const reactiveInfo = reactive(info)
console.log('修改以下代码使输出为false', isReactive(reactiveInfo))
</script><template><div><p>{{ reactiveState.count }}</p></div>
</template>

文档:

响应式 API:进阶 | Vue.js

4、Vue3 + Vue-cli (1) 基础篇

Vue3 + Vue-cli (1) 基础篇_vue3 vue-cli_小草莓蹦蹦跳的博客-CSDN博客

 

5、Vue3+ Vue-cli (2) 组件篇

Vue3+ Vue-cli (2) 组件篇_vue3一个根组件写法_小草莓蹦蹦跳的博客-CSDN博客 

 


http://www.ppmy.cn/news/296315.html

相关文章

ai文案生成器:让写作更快、更准、更有趣

人工智能在各行各业中已经广泛应用&#xff0c;其中包括文案行业。而AI文案生成器是一种利用深度学习算法、自然语言处理技术等实现文本自动生成的工具。这种工具不仅能够帮助我们简化写作流程&#xff0c;还能够提高我们的写作效率、准确度和创造力。 快速生成大量文案 使用A…

上海市大数据技术与应用创新中心成立

大数据到底有什么用&#xff1f;如何对含有意义的数据进行专业化“加工”&#xff1f;如何盘活已有的大数据资源&#xff0c;挖掘其应用价值&#xff1f;今天上午&#xff0c;上海大数据技术与应用创新中心在上海交通大学成立。该中心由上海交通大学发起成立&#xff0c;联合复…

有孚网络与上海大数据股份达成战略合作伙伴关系,启动全面合作

​3月31日&#xff0c;上海有孚网络股份有限公司&#xff08;以下简称“有孚网络”&#xff09;与上海市大数据股份有限公司&#xff08;以下简称“上海大数据股份”&#xff09;签署了《战略合作协议书》&#xff0c;双方就技术合作、市场推广、业务融合及推广合作等展开了高层…

大数据学习规划

当我说要做大数据工程师时他们都笑我&#xff0c;直到三个月后…… 2017年10月25日 14:52:16 GitChat技术杂谈 阅读数&#xff1a;70119 版权声明&#xff1a;本文为GitChat作者的原创文章&#xff0c;未经 GitChat 允许不得转载。 https://blog.csdn.net/GitChat/article/de…

大数据常见应用场景及架构改进

大数据常见应用场景及架构改进 大数据典型的离线处理场景1.大数据数据仓库及它的架构改进2.海量数据规模下的搜索与检索3.新兴的图计算领域4.海量数据挖掘潜在价值 大数据实时处理场景 大数据典型的离线处理场景 1.大数据数据仓库及它的架构改进 对于离线场景&#xff0c;最典…

2023大数据面试真题(持续更新)

一.Hadoop 1.hdfs写流程 2.hdfs读流程 3.hdfs的体系结构 4.一个datanode 宕机,怎么一个流程恢复 5.hadoop 的 namenode 宕机,怎么解决 6.namenode对元数据的管理 7.元数据的checkpoint 8.yarn资源调度流程 9.hadoop中combiner和partition的作用 10.用mapreduce怎么处…

上海大数据技术汇(浦东爱酷空间)

由创略科技赞助的大数据技术汇第二场线下公益技术交流开始报名啦: https://www.slidestalk.com/m/4 这次示说网邀请了 Spark 核心贡献者&#xff0c;前databricks工程师&#xff0c;PySpark和Spark Tungsten 1/2项目的核心作者&#xff0c;讲存储计算分离原则实践和思考&#x…

大数据资源

【不要错过文末彩蛋】 from :http://blog.csdn.net/GitChat/article/details/78341484(感谢原作者) 申明&#xff1a; 本文旨在为普通程序员&#xff08;Java程序员最佳&#xff09;提供一个入门级别的大数据技术学习路径&#xff0c;不适用于大数据工程师的进阶学习&#x…