记录一下面试知识点

126 阅读5分钟

1,vue和react的区别

相同点:

1,vue和react都有virtual Dom(虚拟Dom节点);
2,都是通过组件化开发;
3,都是通过props来进行父子组件之间的通信;
4,都支持SSR(服务器得渲染);

不同点:

1,定义不同:Vue.js是一套构建用户界面的渐进式框架,而React是一个用于构建用户界面的开源JavaScript库,主要用于构建UI;
2,数据绑定不同:vue是响应式的双向数据绑定的系统,而react是单向的数据流,没有双向数据绑定;
3,虚拟Dom更新:vue可以根据diff算法计算出virtual Dom的差异,实现部分组件的重新渲染,而不会像react一样,只要是应用的状态发生改变就重新渲染整个组件树;
4,模板不同、框架不同:vue具有单文件组件,可以把html,js,css下载同一个文件里,采用的是MVVM框架,而react依赖于jsx,在js中创建DOM节点,采用的是视图层框架;
5,应用不同:react适用于大型的项目,而vue适用于小型项目;
6,组件写法不同:vue的组件是将html,js,css都写在同一个文件里,但是是分开写的,而react是JSX+inline style,将html和css都写在js里;
7state对象:在vue中,state对象不是必须的,每个单文件组件都有一个data属性进行数据的管理,只有在全局的仓库的数据管理需要用到state对象,而在react中,state对象是必不可少的,而已state对象里的数据只能通过setState方法去更新;
8,模板渲染的方式不同:vue是通过指令来实现htnl是否渲染的,而react是通过JSX渲染模板的,但react并不是必须依赖JSX,react其实是更加接近原生的JS去控制html的渲染;

2,简单说一下MVVM(双向数据绑定)

什么是MVVM?MVVM是Model-View-ViewModel的缩写。

M:指的是model数据模型;
V:指的是view界面;
MV:指的是负责沟通view和model的桥梁;


什么是数据的双向绑定?

在前端页面中,把Model用纯js对象表示,View负责显示,分开这2者。而这2者之间的通信就是通过View Model关联在一起的,View Model负责把Model数据层的数据同步到View视图层显示出来,还负责把View视图层的更新同步到Model数据层。
减少对Dom的操作,改为操作JS对象,这就简单多了。
而这都是通过数据监听器Observer和订阅者watcher实现的,用object.defineProperty()重写数据的get/set,通过set通知订阅者更新数据;

MVVM和MVC的区别:

MVC和MVVM都是一种设计思想,区别不大。主要是MVC中的Controler变成了MVVM中的View Model视图数据层,MVVM主要解决了MVC中大量的DOM节点的操作而导致的性能降低,加载速度变慢,影响用户体验的问题,
MVC模式是单向的数据流模式,需要服务器端配合,js才可以再前端修改服务器渲染后的数据;  
而MVVM是双向数据绑定的,直接修改js的值就可以同步到html视图的改变,不需要服务器的配合;

3,vue的生命周期函数

vue中有11个生命周期函数,常用的有以下8个:

1,beforeCreate:实例创建之前的钩子函数;(页面未渲染)
2,created:实例创建之后的钩子函数;(页面未渲染,但已完成创建,可以在这里请求数据)
3,beforeMount:实例渲染之后的钩子函数;(页面未渲染,但已编译完成virtual Dom虚拟DOM,可以在这里请求数据)
4,mounted:实例渲染完成之后的钩子函数;(页面已渲染完成,可以获取Dom节点,这里一般发起ajax请求数据,进行数据初始化,注意:mounted在整个实例中只执行一次,这也是与activated的区别)
---activated:如果当前页面存在activated()函数,则每次一进入页面就会触发该钩子函数;(被 keep-alive 缓存的组件激活时调用,该钩子在服务器端渲染期间不被调用。是在被包裹组建被激活的状态下使用的生命周期钩子,这也是deactivated的区别)
---deactivated:如果当前页面存在activated()函数,则每次离开页面就会触发该钩子函数;(被 keep-alive 缓存的组件销毁时调用,该钩子在服务器端渲染期间不被调用。在被包裹组件停止使用时调用)
5,beforeUpdate:实例更新之前的钩子函数;
6,updated:实例更新之后的钩子函数;
7,beforeDestroy:实例销毁之前的钩子函数;(在这里会取消掉数据的监听事件,定时器等,在这里还可以获取到实例this)
8,destroyed:实例销毁完成的钩子函数;
---errorCaptured:当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。(可以在此钩子中修改组件的状态。)
类型:(err: Error, vm: Component, info: string) => ?boolean

可以看看下面这个图,更加容易理解记住:

4,简单讲一下对SPA(单页面)的理解