前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第五十二期:对Vue3.0的一些理解

第五十二期:对Vue3.0的一些理解

作者头像
terrence386
发布2022-07-15 10:29:17
2080
发布2022-07-15 10:29:17
举报
文章被收录于专栏:JavaScript高级程序设计

2022年的第一篇文章,也不知道写点什么。近期闲下来之后,大部分时间在看Vue的一些源码,对其中的一些技术点有了一些新的心得,包括它具体能够解决的一些问题以及一些编程的思想。

渐进式框架

对渐进式框架的理解,文档上说Vue是一个渐进式的框架,但是到底什么是渐进式框架呢?我们可以这样理解,项目前期的需求非常简单,我们只需要写几个界面或者做个表单提交数据,那么我们可以直接用Vue的核心框架做完成这些工作,随着项目的不断发展,业务变得复杂起来,我们有可能会用到路由相关的库Vue-router,或者使用状态管理Vuex进行管理,或者我们又可能需要拆分出来一些基础组件,又或者我们需要在一个老旧的系统里嵌入新的功能,随着项目的发展,我们可以自由的去选择组合我们需要的插件,或者技术方案。并且这些插件使得项目的结构变得非常清晰,可维护性也有所提升。大体上渐进式框架就是这么一个逻辑。

当然,标准的渐进式框架的核心是将框架分层。对于Vue来说

最核心的部分是视图层渲染,然后是组件机制,然后基于组件有了路由机制,然后加入状态管理,最外层则是构建工具。

元编程

百科出来的概念如下:

元编程(Metaprogramming)是指某类计算机程序的编写,这类计算机程序编写或者操纵其他程序(或者自身)作为它们的数据,或者在运行时完成部分本应在编译时完成的工作。很多情况下与手工编写全部代码相比工作效率更高。编写元程序的语言称之为元语言,被操作的语言称之为目标语言。一门语言同时也是自身的元语言的能力称之为反射。

简而言之,其实就是框架的作者使用一种编程语言固有的语法特性,创造出相对新的语言特性,使得开发者可以使用新的语法进行开发,从而提升开发效率以及体验。

而Vue以及React框架本身就是一种元编程的一种很好的表现。

Vue3.0的核心变化

近期也找时间看了看Vue3.0的文档,相对于2.x来说,改动点非常多,但是总体看来,感觉有三个比较大的变化。

其一是,响应式的实现由Object.defineProperty()变成了Proxy()。之所以用proxy,其实还是因为技术发展的缘故。Object.defineProperty()的实现虽然很好,但是一直存在的问题就是它只能监听对象属性的修改,无法监听对象属性的新增和删除,而对于监听数组来说,实现的方式其实是一个曲线救国的思路,将原声的数组方法进行了重写。同时,为了弥补这些不足,在全局Api中才有了set和del。

有了proxy之后,它可以直接代理对象和数组,无需去递归遍历对象以及数组,便直接可以进行属性的拦截,同时也可以很好的支持对象的新增和删除,少了递归的过程,我们可以理解为对性能的提升有一定的帮助。

其二是,组合式API的概念,setup。组合式API解决的问题实际上还是关注点分离,或者说解耦。文档上的例子以一个列表数据请求作为demo。并且使用新的api ref进行响应式的数据设置。ref其实可以理解为react中的useState,当然setup内部也支持生命周期的注册。

代码语言:javascript
复制
// src/components/UserRepositories.vue `setup` function
import { fetchUserRepositories } from '@/api/repositories'
import { ref, onMounted } from 'vue'

// 在我们的组件中
setup (props) {
  const repositories = ref([])
  const getUserRepositories = async () => {
    repositories.value = await fetchUserRepositories(props.user)
  }

  onMounted(getUserRepositories) // 在 `mounted` 时调用 `getUserRepositories`

  return {
    repositories,
    getUserRepositories
  }
}

第三个是,以往的项目当中,我们往往采用new Vue(options)的方式去创建一个新的应用。而3.0版本提供了一个createApp()来创建应用的实例。

代码语言:javascript
复制
const app = Vue.createApp({})
app.component('SearchInput', SearchInputComponent)
app.directive('focus', FocusDirective)
app.use(LocalePlugin)

最后,和2.x版本不同的是,3.0的源码全部采用了ts进行重构,如果对vue源码不熟悉的,或者对ts不熟悉的读起来可能需要花费更多的时间。

而从这些变化来看,Vue的语法似乎跟React更加接近,比如说新增的一个Teleport

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JavaScript高级程序设计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 渐进式框架
  • 元编程
  • Vue3.0的核心变化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档