vue源码全方位深入解析_vue3 源码解析

hacker|
135

文章目录:

什么是vue框架?

什么是vue

是一套构建用户界面的渐进式(用到哪一块就用哪一块,不需要全部用上)前端框架,Vue 的核心库只关注视图层

vue的兼容性

Vue.js 不支持 IE8 及其以下版本,因为 Vue.js 使用了 IE8 不能模拟的 ECMAScript 5 特性。 Vue.js 支持所有兼容 ECMAScript 5 的浏览器。

vue学习资源

vue.js中文官网:

vue.js源码:

vue.js官方工具:

vue.js官方论坛:forum.vuejs.org

对比其他框架-React

React 和 Vue 有许多相似之处,它们都有使用 Virtual DOM;提供了响应式(Reactive)和组件化(Composable)的视图组件。将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关的库。React 比 Vue 有更丰富的生态系统

都有支持native的方案,React的RN,vue的Wee下

都支持SSR服务端渲染

都支持props进行父子组件间的通信

性能方面:React 和 Vue 在大部分常见场景下都能提供近似的性能。通常 Vue 会有少量优势,因为 Vue 的 Virtual DOM 实现相对更为轻量一些。

不同之处就是:

数据绑定方面,vue实现了数据的双向数据绑定,react数据流动是单向的

virtual DOM不一样,vue会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树.而对于React而言,每当应用的状态被改变时,全部组件都会重新渲染,所以react中会需要shouldComponentUpdate这个生命周期函数方法来进行控制

state对象在react应用中不可变的,需要使用setState方法更新状态;在vue中,state对象不是必须的,数据由data属性在vue对象中管理(如果要操作直接this.xxx)

组件写法不一样, React推荐的做法是 JSX , 也就是把HTML和CSS全都写进JavaScript了,即'all in js'; Vue推荐的做法是webpack+vue-loader的单文件组件格式,即html,css,js写在同一个文件

对比其他框架-angular

在性能方面,这两个框架都非常的快,我们也没有足够的实际应用数据来下一个结论。如果你一定想看些数据的话,你可以参考这个第三方跑分。单就这个跑分来看,Vue 似乎比 Angular 要更快一些。

在大小方面,最近的 Angular 版本中在使用了 AOT 和 tree-shaking 技术后使得最终的代码体积减小了许多。但即使如此,一个包含了 vuex + vue-router 的 Vue 项目 (30kb gzipped) 相比使用了这些优化的 Angular CLI 生成的默认项目尺寸 (~130kb) 还是要小的多。

灵活性:Vue 相比于 Angular 更加灵活,Vue 官方提供了构建工具来协助你构建项目,但它并不限制你去如何组织你的应用代码。有人可能喜欢有严格的代码组织规范,但也有开发者喜欢更灵活自由的方式。

vue.js的核心特点—响应的数据绑定

传统的js操作页面:在以前使用js操作页面的时候是这样的,需要操作某个html元素的数据,就的使用js代码获取元素然后在处理业务逻辑

响应式数据绑定的方式操作页面,可以直接使用像下面代码那样的写法就可以将数据填充到页面中

template

div id="app"

{{ message }}

/div

/template

script

export default {

name: 'app',

data () {

return {

message: 'Welcome to Your Vue.js App'

}

}

}

/script

style

/style

vue.js的核心特点—可组合的视图组件

一个页面映射为组件树。划分组件可维护、可重用、可测试,也就是一个页面由多个组件组合而成

vue中实现组件引入示例

第一步:import导入需要引入的组件文件;

第二步:注册组件;

第三步:在需要引入组件的文件中加上组件标签(这个标签的标签名就是注册的组件名字,多个单词的和这里有xx-xx的形式)

需要注意的是:组件可以嵌套引入,也就是说组件可以引入其他组件

首先创建一个组件,用于被引入的组件,组件名字叫Hello.vue

————————————————

版权声明:本文为CSDN博主「胡椒粉0121」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

慕课网上没搜到vue源码,有没有课程透彻分析Vue 源码的?

有,你在实战里找是huangyi讲的,印象中是从 Vue 的跨平台编译入手,从 Vue 的几个核心能力开始分析Vue 源码。 Vue 的静态全局 API 与属性, Vue 的响应式原理,异步组件、组件化、diff 算法等等方面,都是进行了详细的分析,最后还附带了vuex和vuerouter。

vuejs源码用了什么设计模式,具体点的

最简单的订阅者模式

// Observer

class Observer {

constructor (data) {

this.walk(data)

}

walk (data) {

// 遍历

let keys = Object.keys(data)

for(let i = 0; i keys.length; i++){

defineReactive(data, keys[i], data[keys[i]])

}

}

}

function defineReactive (data, key, val) {

observer(val)

// dep 为什么要在这里实例化, 就是为了实现, 对象每一层的 每一个key都有自己的一个订阅实例, 比如 a.b 对应 dep1, a.c 对应dep2, 这里虽然都是let dep = new Dep()

// 但每次来到这个方法, dep都是独立的, 会一直保留在内存. 这样在每次调用set方法都能找到这个a.b对应的dep

// dep 这里会一直保存, 是因为闭包的关系, Object这个全局的函数, 引用了上层的作用域, 这个作用域包含了 dep, 除非Object = null, 或者退出浏览器, dep才会消失

//实例化之后, dep就有了被订阅, 和发布消息的功能, dep不写在这里也是可以的, 多定义一个全局函数, 每次obser的时候增加一个dep

let dep = new Dep()

Object.defineProperty(data, key, {

enumerable: true,

configurable: true,

get: function () {

//每次new Watch('a.b'), 都会先执行get方法, 进而来到这里, 触发 dep.depend(), 这个dep就是 a.b 对应的 订阅,

dep.depend()

return val

},

set: function (newVal) {

if(val === newVal){

return

Vue到底是什么?

vue是一个构建用户界面的框架(库),它的目标是通过尽可能简单的api实现响应的数据绑定和组合的视图集合。vue核心是关注视图层,因此它非常容易学习,非常容易与其它库或已有项目整合。vue在与相关工具和支持库一起使用时, 也能很好地驱动复杂的单页应用。

5条大神的评论

  • avatar
    访客 2022-07-05 下午 10:26:29

    ep let dep = new Dep() Object.defineProperty(data, key, { enumerable: true, configurab

  • avatar
    访客 2022-07-06 上午 04:26:39

    date这个生命周期函数方法来进行控制state对象在react应用中不可变的,需要使用setState方法更新状态;在vue中,state对象不是必须的,数据由data属性在vue对象中

  • avatar
    访客 2022-07-05 下午 10:38:03

    文章目录:1、什么是vue框架?2、慕课网上没搜到vue源码,有没有课程透彻分析Vue 源码的?3、vuejs源码用了什么设计模式,具体点的4、Vue到底是什么?什么是vue框架?什么是vue是一

  • avatar
    访客 2022-07-05 下午 08:25:14

    on () { //每次new Watch('a.b'), 都会先执行get方法, 进而来到这里, 触发 dep.depend(), 这个dep就是 a.b 对应的 订阅,

  • avatar
    访客 2022-07-05 下午 08:49:53

    .xxx)组件写法不一样, React推荐的做法是 JSX , 也就是把HTML和CSS全都写进JavaScript了,即'all in js'; Vue推荐的做法是web

发表评论