React&Vue
2019-09-23 本文已影响0人
不思量q
-
MVVM&MVC
- 关于这两者我们要知道的事情是,两者均不是
MVVM
框架,只是借鉴了其思想。MVVM
和MVC
之间的区别在于,MVC
是使用控制器去更新模型,然后从模型中获取到数据渲染视图。当用户有输入时,会通过控制器去更新模型,并通知视图进行更新。从中我们可以看出,MVC
中控制器的责任太重了,如果项目变得复杂,那么代码会变得很臃肿,不利于维护。 - 在
MVVM
中引入了viewmodel
的概念,其只关心数据和业务的处理,而不用在意view
如何处理数据。这样view
和model
都独立出来,任何一方改变都不一定会改变另一方,对于可复用的逻辑可以放在一个viewModel
中,让多个view
复用该ViewModel
。 - 对于
Vue
框架来说,ViewModel
就是组件的实例。View
就是模板,Model
倾向于对数据的处理。其中还加入了隐式的binder
,它是Vue
通过解析模板中的插值和指令对View
和ViewModel
的绑定。 - 通过
ViewModel
将视图中的状态和用户的行为分离出一个抽象,才是MVVM
的精髓。
- 关于这两者我们要知道的事情是,两者均不是
-
Virtual DOM
- 首先我们要明白一点,操作
JS
对象比操作DOM
会快很多; - 所以我们可以使用
JS
对象来模拟出虚拟的DOM
,但这只是第一步,真正体现差异的是如何判断两个JS
对象的最小差异并且实现局部更新。 -
DOM
是一个多叉树的结构,如果需要完整的对比两颗树的差异,那么时间复杂度是很大的。而React
团队优化了算法,将时间复杂度降到了O(n)
。 -
React
和Vue
中用到的key
这个属性,就是为了给每个节点打标志的,用于判断是否为同一个节点,判断差异的算法因此受益(深度优先遍历)。 - 虚拟
DOM
提高了性能是其一优势,但是,其最大的优势在于,将Virtual DOM
作为一个兼容层,还可以对接非WEB
系统,实现跨端开发。除此之外,通过虚拟DOM
还可以渲染到其他平台,如实现SSR
,同构渲染等,而且还可以实现组件的高度抽象化。
- 首先我们要明白一点,操作
-
前端路由原理
- 包括两种实现方式:
Hash
模式和History
模式; - 其本质就是监听URL的变化,然后匹配路由规则,实现局部刷新页面。
-
Hash
模式:www.test.com/#/
就是该模式,服务器接收到的请求永远是#号前的地址。#后的哈希值发生变化时,可以通过hashchange
事件监听到URL的变化。其优点是相对简单,而且兼容性好。 -
Histroy
模式:由H5
推出,主要使用history.pushState
和history.replaceState
改变URL,此模式同样不会引起页面的刷新,只会更新浏览器的浏览记录。如使用popState
可以后退。 - 两种方式的对比:
-
Hash
只可以改变#号后面的内容,History
可以通过API设置任何同源的URL -
Hash
只能更改哈希值,而History
可以通过API添加任意类型的数据到历史记录中 -
Hash
无需后端配置,而History
模式在用户手动输入地址或刷新页面的时候会发起URL请求,且后端需配置匹配不到静态资源时的index.html
-
- 包括两种实现方式:
-
React&Vue
之间的区别-
Vue
支持双向绑定,相对来说更方便一点,但本质上两者是一样的。 -
改变数据状态的方式上,
React
需要使用setState
来改变状态,而vue
底层使用了依赖追踪,更新渲染更优。 -
React
的Jsx
还是有一定的上手难度,还可以直接编写render
函数就能在浏览器中运行。 -
生态
-