当前位置: 首页 > news >正文

Vue 3.0 学习 新特性

Vue 3.0 新特性

一、迎接 Vue 3.0

1. 简介

Vue.js 作者兼核心开发者尤雨溪宣布 Vue 3.0 进入 Beta 阶段。

  • 已合并所有计划内的 RFC

  • 已实现所有被合并的 RFC

  • Vue CLI 现在通过 vue-cli-plugin-vue-next 提供了实验性支持

2. 新特性

重点关注:

  • 更快更省

    Object.defineProperty ——> Proxy

    重构 Virtual DOM

  • 完全的TypeScript

    团队开发更轻松

    架构更灵活,阅读源码更轻松

    可以独立使用Vue内部模块

  • Composition API(组合式API)

    一组低侵入式的、函数式的 API

    更好的逻辑复用与代码组织

    更好的类型推导

3. 参考资源

  • GitHub - vuejs/core: 🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • https://vue-composition-api-rfc.netlify.app

二、初始化项目

  1. 系统环境

    npm -v
    nrm ls
  2. 安装@vue/cli

    npm install @vue/cli -g
  3. 创建项目

    vue create 项目名
  4. 在项目中安装 vue-next插件,试用Vue3 beta

    vue add vue-next
  5. 项目变化

    import { createApp } from 'vue';
    import App from './App.vue'
    ​
    createApp(App).mount('#app')
  6. 启动项目

    npm run serve

补充:

  1. vue-devtools 暂不支持Vue 3.0

  2. VSCode中安装Vue 3 Snippets插件

三、setup函数

setup 函数是一个新的组件选项。作为在组件内使用 Composition API 的入口点。

1. 调用时机

setup 函数会在 beforeCreatee 钩子之前被调用

2. 返回值

如果 setup 返回一个对象,则对象的属性可以在组件模板中被访问

3. 参数

第一个参数为 props,接收当前组件props选项的值,即获取父组件传递过来的参数

export default {props: {name: String,},setup(props) {console.log(props.name)},
}

第二个参数为context,接收一个上下文对象,该对象中包含了一些在vue 2.x 中需要通过 this 才能访问到属性

const MyComponent = {setup(props, context) {context.attrscontext.slotscontext.emit}
}

注:在 setup() 函数中无法访问 this

四、响应式系统API

Vue 3.0提供的一组具有响应式特性的函数式API,都是以函数形式提供的

1. reactive

reactive()函数接收一个普通对象,返回该普通对象的响应式代理对象

简单来说,就是用来创建响应式的数据对象,等同于vue 2.xVue.observable()函数

步骤:

  1. 按需导入 reactive 函数

    import { reactive } from 'vue'
  2. 调用 reactive 函数,创建响应式数据对象

    setup() {// 创建响应式数据对象const data = reactive({count: 0})// 将响应式数据对象暴露出去return data;
    }

2. ref

ref()函数接收一个参数值,返回一个响应式的数据对象。该对象只包含一个指向内部值的 .value 属性

  • 基本用法

  • 在模板中访问时,无需通过.value属性,它会自动展开

  • 在reactive对象中访问时,无需通过.value属性,它会自动展开

3. computed

computed() 函数用来创建计算属性,函数的返回值是一个 ref 的实例

  • 只读的计算属性

  • 可读可写的计算属性

4. readonly

readonly()函数接收一个对象(普通或响应式),返回一个原始对象的只读代理对象

5. watch

watch() 函数用来监视数据的变化,从而触发特定的操作,等同于 vue 2.x中的 this.$watch

  • 监视单个数据源

  • 监视多个数据源

  • 取消监视

  • 清除无效的异步任务

6. watchEffect

watchEffect()函数接收一个函数作为参数,并立即执行该函数,同时响应式追踪其依赖,并在其依赖变更时重新运行该函数。

五、响应式系统工具集

1. isRef

检查一个值是否为一个 ref 对象。

2. isReactive

检查一个对象是否是由 reactive 创建的响应式代理。

3. isReadonly

检查一个对象是否是由 readonly 创建的只读代理。

4. isProxy

检查一个对象是否是由 reactive 还是 readonly 方法创建的代理。

5.unref

如果参数是一个 ref 则返回它的 value,否则返回参数本身。它是 val = isRef(val) ? val.value : val 的语法糖。

6. toRef

toRef()函数用来将 reactive 对象的一个属性创建为一个 ref,并且这个 ref 具有响应性,可以被传递。

7. toRefs

toRefs()函数用来将 reactive 对象创建为一个普通对象,但该普通对象的每个属性都是一个 ref,并且这个 ref 具有响应性,可以被传递。

六、生命周期钩子函数

Vue 3.0 中的生命周期函数和 Vue 2.x 相比做了一些调整和变化,对应关系如下:

  • beforeCreate -> 使用 setup()

  • created -> 使用 setup()

  • beforeMount -> onBeforeMount

  • mounted -> onMounted

  • beforeUpdate -> onBeforeUpdate

  • updated -> onUpdated

  • beforeDestroy -> onBeforeUnmount

  • destroyed -> onUnmounted

  • errorCaptured -> onErrorCaptured

这些生命周期钩子函数只能在 setup() 函数中使用

七、依赖注入

依赖注入就是祖先组件向后代组件传递数据,使用provide()inject() 函数来实现,功能类似 vue 2.x中的 provide/inject

这两个函数只能在 setup() 函数中使用:

  • 在祖先组件中使用provide()函数向下传递数据

  • 在后代组件中使用inject()函数获取上层传递过来的数据

八、模板 Refs

通过 ref()函数还可以引用页面上的元素或组件,功能类似于 vue 2.x中的 vm.$refs

步骤:

  1. setup() 中创建一个 ref 对象并返回它

  2. 在页面上为元素添加 ref 属性,并设置属性值与创建的 ref 对象的名称相同

  3. 当页面渲染完成后,可以通过该 ref 对象获取到页面中对应的DOM元素

相关文章:

  • Python-platform模块
  • 1-1 暴力破解-枚举
  • 代码之困:那些让你苦笑不得的bug
  • html和css中图片加载与渲染的规则是什么?
  • 系列四十五、Spring的事务传播行为案例演示(五)#MANDATORY
  • 驱动第十天
  • libpcap获取数据包
  • 前度开发面试题
  • 【网络协议】聊聊http协议
  • linux中断下文工作队列之延迟工作(中断六)
  • 第三届字节跳动奖学金官宣开奖,13位优秀科研学子每人获10万奖学金
  • 「永不失联」产品创新与升级系列发布,预约直播“即将发车”
  • 结构体内存分配
  • 基于STC系列单片机实现定时器0扫描数码管显示定时器/计数器1作为计数器1产生频率的功能
  • mysql存在10亿条数据,如何高效随机返回N条纪录,sql如何写
  • [译]如何构建服务器端web组件,为何要构建?
  • 【css3】浏览器内核及其兼容性
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Akka系列(七):Actor持久化之Akka persistence
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • ECS应用管理最佳实践
  • Java多态
  • node-glob通配符
  • pdf文件如何在线转换为jpg图片
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 读懂package.json -- 依赖管理
  • 理清楚Vue的结构
  • 前端性能优化--懒加载和预加载
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 微信小程序--------语音识别(前端自己也能玩)
  • 正则学习笔记
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​io --- 处理流的核心工具​
  • ​什么是bug?bug的源头在哪里?
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (2020)Java后端开发----(面试题和笔试题)
  • (C)一些题4
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (rabbitmq的高级特性)消息可靠性
  • (初研) Sentence-embedding fine-tune notebook
  • (黑马C++)L06 重载与继承
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (转)四层和七层负载均衡的区别
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .htaccess配置重写url引擎
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 中什么样的类是可使用 await 异步等待的?
  • @RequestMapping-占位符映射
  • [ C++ ] STL---仿函数与priority_queue
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [C++数据结构](22)哈希表与unordered_set,unordered_map实现
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大