Vue3-day02

文章介绍了Vue3中的ref函数在处理基本类型和响应式数据中的作用,以及为什么setup函数默认非响应式。还讨论了ref与reactive的区别,包括适用场景和原理,强调了Vue3中proxy对数据响应式改进的地方。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ref函数

一般用于将基本类型数据处理成响应式数据

作用:定义一个基本类型的响应式的数据,只有数据成为响应式数据,这样当数据变化时,才能被监测到

使用: 使用时需要从 vue 中引入

<script>

    import { ref } from 'vue'; // 引入响应式函数ref

</script>

为什么setup函数默认为非响应式呢?

如果你的数据只是渲染式后续不具有响应式那种情况下,vue3之前它默认放到data里,它是具有响应式,浪费了一些监听器的性能。

        把这个设置响应式的一个操作,为了交给开发者去做,使它的性能更高。

        你的数据是否需要响应式,开发者肯定知道,于是逐渐将这个决定权,移交给开发者

ref 数据响应

 为什么能改,因为它是存了个引用,对象,对象的属性可以改

        ref 函数实现响应式的原理还是利用了 vue2的objectdelineProperty{}给数据设置get set监听函数 

        接收的数据类型可以是基本类型实现响应式原理为object.defineProperty{},也可以是对象类型【当为对象时】实现这个的是响应式原理就是Proxy,而不是object.definePropety{}

        如果要实现数值和对象的监听,那你必须要实现递归,但是Vue的作者觉得这样性能太低

  

ref 升级

传统有割裂感,现代更舒服

 传统和现代

 

 这样值也可以改变,是因为让它变成了一个响应式对象了。

 以上是对一个值进行响应,那么设置一个对象呢?

 看到这样写确实没有割裂感,但是写多了确实也烦 

reactive 函数

reactive 作用于对象和属性上,它不能去设置字符串、数字、boolean值的响应式。

如果你针对的是一个数组对象的话,用 reactive 就可以

 所以老老实实的用 ref 吧

 

 修改值,最好的用法 reactive 和 ref

 

  • Vue3中使用proxy实现的数据响应去掉了 Vue2中不能检测到对象添加属性和通过下标修改数组而无法检测的情况

Reactive 与 Ref 对比

对比内容refreactive
数据定义角度基本数据类型对象或数组类型数据
原理角度使用 Object.defineProperty() 的 get 和 set使用 Proxy 实现数据响应式,通过 Reflect 操作源对象数据
使用角度数据操作需要使用 .value数据操作不需要 .value

<think>嗯,用户想了解Vue3中v-calendar组件的使用教程和示例代码。首先,我需要确认v-calendar是否支持Vue3,因为有些库可能还在Vue2阶段。根据用户提供的引用[1]和[3],项目地址是同一个,说明v-calendar确实有对应的Vue版本,但需要确认是否适配Vue3。用户提供的引用中,引用[4]提到的是Vue2 Calendar组件,而引用[5]是关于vue2-slot-calendar的,这可能意味着用户可能混淆了不同版本。因此,需要明确告知用户v-calendar的Vue3支持情况。 接下来,按照用户的请求,需要给出安装步骤、基本使用示例、常用功能以及自定义插槽的使用。安装部分相对直接,使用npm或yarn安装即可。基本使用需要展示如何在Vue3中引入和注册组件,可能引用[2]中的代码,但注意引用[2]是关于vue-calendar-heatmap的,这里需要调整,确保代码示例正确对应v-calendar。 然后,常用功能如日期选择、属性配置(如颜色、日期范围)、事件处理(如日期点击)都是关键点。需要参考官方文档的结构,确保示例代码正确,比如使用mode属性设置类型,is-dark调整主题。同时,用户可能需要知道如何自定义样式或内容,这时候插槽的使用就很重要了,比如date-cell插槽,这部分需要示例说明如何覆盖默认内容。 另外,用户提供的引用中有多个不同的库,比如vue2-calendar和vue-calendar-heatmap,需要避免混淆,明确当前讨论的是v-calendar的Vue3版本。可能需要注意版本号,比如安装时指定版本,或者确认默认安装的是Vue3兼容版本。 最后,相关问题部分需要生成与v-calendar相关的问题,比如安装问题、属性配置、事件处理、样式覆盖、移动端适配等,确保覆盖用户可能遇到的后续疑问。同时,引用需要正确对应,比如引用[1]和[3]指向同一项目,但用户可能分成了不同引用,需要核对并正确标注。 总结步骤:安装→引入→基本使用→常用功能→自定义插槽→相关问题。确保所有代码示例符合Vue3的语法,比如使用createApp和正确的导入方式,避免使用Vue2的Vue.use()方法。同时,提醒用户注意版本兼容性,可能需要在安装时使用特定命令如@next获取Vue3支持的版本。</think>### Vue3 v-calendar 组件使用教程 #### 1. 安装 ```bash npm install v-calendar@next # 或 yarn add v-calendar@next ``` #### 2. 基本使用 ```javascript // main.js import { createApp } from &#39;vue&#39; import App from &#39;./App.vue&#39; import VCalendar from &#39;v-calendar&#39; createApp(App) .use(VCalendar, {}) .mount(&#39;#app&#39;) ``` ```vue <!-- App.vue --> <template> <Calendar :attributes="attrs" /> </template> <script setup> import { ref } from &#39;vue&#39; const attrs = ref([ { key: &#39;today&#39;, highlight: true, dates: new Date() } ]) </script> ``` #### 3. 常用功能 - **日期选择器**: ```vue <DatePicker v-model="date" :mode="&#39;double&#39;" /> ``` - **自定义主题**: ```vue <Calendar :is-dark="true" color="blue" :min-date="new Date(2023, 0, 1)" :max-date="new Date(2023, 11, 31)" /> ``` - **事件处理**: ```vue <Calendar @dayclick="handleDayClick" /> <script setup> const handleDayClick = (day) => { console.log(&#39;选中的日期:&#39;, day.id) } </script> ``` #### 4. 自定义插槽 ```vue <Calendar> <template #day-popover="{ day }"> <div class="custom-popover"> {{ day.label }} </div> </template> </Calendar> ``` #### 5. 样式覆盖 ```css /* 自定义导航按钮 */ .vc-nav-item { background: #4CAF50; color: white; } ``` §§ 相关问题 §§ 1. 如何解决v-calendar安装时的版本兼容问题?[^1] 2. 怎样实现跨月份范围选择日期?[^3] 3. 如何自定义日历单元格的显示内容?[^3] 4. 日期格式化的最佳实践是什么? 5. 移动端如何优化v-calendar的显示效果?[^4] [^1]: v-calendar官方文档:https://vcalendar.io/ [^3]: 项目示例参考:https://gitcode.com/gh_mirrors/vc/v-calendar [^4]: Vue2日历组件迁移指南:https://gitcode.com/gh_mirrors/vu/vue2-calendar
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值