vue源码观看记录

蹲街弑〆低调 提交于 2020-04-05 21:52:39

vue源码

 

运行顺序

 

initMixin 挂载  vue.prototype._init 原型方法

 

再该方法内初始化了vue的相关方法如:

    vm._self = vm

    /*初始化生命周期*/

    initLifecycle(vm)

    /*初始化事件*/

    initEvents(vm)

    /*初始化render*/

    initRender(vm)

    /*调用beforeCreate钩子函数并且触发beforeCreate钩子事件*/

    callHook(vm, 'beforeCreate')

    initInjections(vm) // resolve injections before data/props

    /*初始化propsmethodsdatacomputedwatch*/

    initState(vm)

    initProvide(vm) // resolve provide after data/props

    /*调用created钩子函数并且触发created钩子事件*/

    callHook(vm, 'created')

 

vm 即当前this作用域指针

 

 

 

Props

 

normalizeProps 

 

数组的方式传props 仅支持string  props:  [‘a’, b’]

常用的props是对象的形式  

```

Props: {

a: String,

b: {

type: Number

}

}

```

Directives

 

在创建实例的时候,创建指令,源码编译时会将其序列化

 

全局写法 Vue.directive(‘click’, {…})

组件内写法 directives: { click, {…} }

 

这里针对的是组件内写法

 

内部是将每个data设置了getsetget时会执行所有设置的getterset时会先执行get获取旧值比较,然后赋值并重新对新值observe,之后进行dep.notify => watcher.update => 回调丢入队列任务,回调执行时调用对应观察者的run方法以执行其get方法 => 首先会执行当前的观察者watcherget并设置为Dep.tartget即订阅器目标,接下来执行的dataget时会收集当前发生变化的所有的依赖关系(及子项)之后移除Dep.tartget,后通知当前所有收集到的依赖关系订阅的观察者更新,及子组件更新

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!