前端一些题

106 阅读2分钟

mvc与mvvm的区别

它两都属于一种设计模式,主要的目的是将代码层次划分的更加清晰,降低代码的耦合度,便于后期的维护;

mvc中m指的是model代表数据模型,v指的是viwe代表视图模型,c指的是controller代表业务模型;在该设计模式下讲究的是单向数据流,controller在view 和model中间起着承上启下的作用,它会获取从view视图层传递过来的用户指令来对model数据层中的数据进行对应的操作;而model会操作dom节点将该数据的更改表现在view上,因此在该设计模式下view是依赖于model的;并且有些逻辑会直接写在view中,导致后期维护性极差,公用逻辑也没有办法得到复用;

而mvvm中m指的是model代表数据模型,v指的是viwe代表视图模型,唯一不同的是vm,它代表的是连接v和m的桥梁,因为在该设计模式下model没有办法直接访问view,view也没办法访问model;实现了真正的数据和视图的分离;并且v与vm,m与vm之间为双向通信,实现了双向数据绑定;数据更新与mvc也不一样,实现了以数据驱动视图,当数据发生变化时,视图也会发生变化;

vue与react的区别

两者的相同点有:

  1. 数据驱动视图:更关注于数据的变动,无需操作dom就可以更新视图
  2. 组件化开发:将一个页面划分为一个个小组件,降低页面耦合度,实现组件服用,便于后期维护;
  3. 采用虚拟dom+diff算法:react和vue的页面最后都会执行render函数生成vNode虚拟dom;当数据更新的时候,生成新的虚拟dom,新老虚拟dom使用diff算法对比,找出最小更新范围,去更新真实的dom节点;

不同点有:

  1. react的数据是不可变的,需要调用setState方法去改变data;
  2. vue实现了双向数据绑定,react讲的是单向数据流,但是也可以使用onChange和setState实现双向数据绑定;
  3. react讲的是all in js,将html、css、js全写在js中;vue讲的是模板template单文件格式;将html、css、js写在一个文件里;
  4. vue更注重数据的监听,它会给每个数据属性都绑定一个watcher,当该属性发生变化时,就会去更新对应的虚拟dom;如果一个项目非常的大,有很多数据属性,相应的也会有很多watcher,则会导致项目性能很差,因此大型项目更推荐react;