Skip to content

Latest commit

 

History

History
69 lines (43 loc) · 2.03 KB

源码面试题分析.md

File metadata and controls

69 lines (43 loc) · 2.03 KB

vue面试题

通信

8种常用的通信

1 prop $emit

2.

3.

3.

3.

3.

3.

3.

生命周期

生命周期实现

父子组件生命周期顺序

父子组件渲染以及创建过程

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){
	   用户更新数据的数据触发更新
     }
  })
  什么是依赖收集?
  用一个[],里面放着数据修改的所有函数,当数据更改时,就触发所有的函数都进行调用