父子组件渲染以及创建过程
beforeCreate-> created-> befoerMounted -> mounted-> beforeUpdate-> updated
1 父beforeCreate -> 父created->父befoerMounted ->子beforeCreate ->子created-->子befoerMounted> 子mounted -> 父mounted
// 上述的过程分析:
vue 是什么? 解决了什么问题,如果没有vue我们需要怎么做?
vue是一个框架,框架与工具的区别是,框架需要整个项目围绕它定义的语法去书写代码,而工具只是部分的调用,传入需要的入参即可。
vue做了什么事情?
1 vue接管了我们定义的页面模板,允许我们写插值表达式的方式,让数据实现双向绑定,且在数据修改的时候再页面更新展示,如果没有vue我们需要频繁的操作dom元素,让后让dom元素的属性在页面增删改查,如修改dom的样式,用户操作时删除以及修改dom的样式等。。
vue是如何做到的?
1 通过接管用户的模板,获取用户定义的模板语法,通过编译
将template语法 转换成 AST 语法树,其中描述了用户定义的指令,修饰符,
将ast转换成 render语法,_c('div',{class:'change'},[....]),这个是创建元素需要的vnode
将render 函数 通过 createElement createText等创建创建dom元素
2 vue 是如何在页面使用元素的时候,做到双向绑定的?以及当定义的数据修改后,触发页面更新的?
双向绑定的原理是在用户定义的数据上通过 Object.definedProperty(data,{
get(){
页面使用的时候会调用get,进行数据的依赖收集
},
set(value){
用户更新数据的数据触发更新
}
})
什么是依赖收集?
用一个[],里面放着数据修改的所有函数,当数据更改时,就触发所有的函数都进行调用