1、起源于Facebook,2013年开源。
2、特点:
声明试设计(声明试是告诉计算机做什么,不管他怎么做,命令式是告诉计算机怎么做)。
高效:通过虚拟Dom,最大程度上减少真实Dom的交互。
灵活:约束小,可与已知的库和框架很好的配合。
JSX:js语法的扩展。
组件:通过面向对象使组件得到复用。
单向数据流:子集不能修改父集传过来的参数。
3:虚拟Dom:一个真实的JS对象,由于直接操作Dom就会发生回流,成本过高。
4:回流与重绘:
回流:当render树中的一部分或者全部因为大小距离等问题改变而需要重建的过程。
重绘:当元素的一部分属性发生变化,如外观背景,不会引起布局变化而需要重新渲染的过程。
回流必能引起重绘,重归不一定能引起回流。
5、浏览器如何渲染页面:
HTML解析器,解析HTML结构,生成Dom树。
Css解析器,解析CSS的内链样式,生成样式表。
讲Dom树和样式表结合,生成Render树(每个Dom元素都有一个方法用来接收样式表信息,返回一个render对象,render对象编译生成render树)。
render树渲染完毕后浏览器会根据样式表来决定页面的位置。
6:专注视图层:专注提供清晰简介的View解决方案
注:vue和react本质是VC框架,配合第三方包(如Vuex)才是MVC框架。
7:函数化编程:结构化编程的一种
主要思想:把问题的解决方案写成一系列嵌套的函数调用
纯函数:作用与相同的输入,永远会得到相同的输出,没有任何可观察的副作用,也不会依赖外部环境的状态。
eg:Array.slice(不改变原数组) 纯函数
Array.splice(改变原数组) 不是纯函数
优点:有效降低系统的复杂性,可缓存性
柯里化函数:传递给函数的一部分用来调用他,让他返回一个函数去处理 剩下的参数
eg: var add=(x+y)=>x+y 柯里化函
var add=(a)=>(b)=>a+b;add(3)(2)//5
是一种预加载函数的方法,通过传递较少的参数,得到一个已经记住了这些参数的新函数,是一种对参数的缓存。
函数组合:为了解决函数嵌套问题[Fn(g(f(x))],需要用到函数组合。
var compose =(f,g)={x=>f(g(x))}
函数化编程的优点:代码简介,开发快速。 接近自然语言,易于理解 。 更方便代码管理。 易于并发编程 代码的热升级
8、vue与react的区别:
相同点:都使用的虚拟Dom
都提供了响应式和组件化的视图组件。
讲注意力集中保持在核心库,其他功能如路由和全局状态管理交给其他库。
不同点:优化性方面,react有自己的一套东西,shouldComponentUpdate用来减少一些不必要的虚拟Dom对比。
react用的是JSX语法,而Vue是将html,js,css放到Vue文件里。
react的css是写在单独的文件里,vue是写在vue文件里
react约束性小,灵活性大,使用原生JS较多,适合开发大型项目,vue灵活性小,约束性大(指令等)适合快速开发项目