面试的时候问 vue 和 react 的区别?

回答·8
最热
最新
  • 共同点: 数据驱动视图 组件化 都使用 Virtual DOM 不同点: 核心思想不同 Vue 早期开发就尤雨溪大佬,所以定位就是尽可能的降低前端开发的门槛,让更多的人能够更快地上手开发。这就有了 vue 的主要特点:灵活易用的渐进式框架,进行数据拦截/代理,它对侦测数据的变化更敏感、更精确。 React 从一开始的定位就是提出 UI 开发的新思路。背靠大公司 Facebook 的 React,从开始起就不缺关注和用户,而且 React 想要做的是用更好的方式去颠覆前端开发方式。所以 React 推崇函数式编程(纯组件),数据不可变以及单向数据流,当然需要双向的地方也可以手动实现, 比如借助 onChange 和 setState 来实现。 由于两者核心思想的不同,所以导致 Vue 和 React 在后续设计产生了许多的差异。 组件写法差异 React 推荐的做法是 JSX + inline style, 也就是把 HTML 和 CSS 全都写进 JavaScript 中,即 all in js; Vue 推荐的做法是 template 的单文件组件格式(简单易懂,从传统前端转过来易于理解),即 html,css,JS 写在同一个文件(vue 也支持 JSX 写法) 这个差异一定程度上也是由于二者核心思想不同而导致的。 diff 算法不同 响应式原理不同 Vue Vue 依赖收集,自动优化,数据可变。 Vue 递归监听 data 的所有属性,直接修改。 当数据改变时,自动找到引用组件重新渲染。 React React 基于状态机,手动优化,数据不可变,需要 setState 驱动新的 state 替换老的 state。当数据改变时,以组件为根目录,默认全部重新渲染, 所以 React 中会需要 shouldComponentUpdate 这个生命周期函数方法来进行控制
  • react 是单向数据流,vue 是双向数据绑定 react 的 jsx 语法很灵活 vue 的缺点 基于对象配置文件的组件写法,背后做了一大堆重挂 this 之类的魔法操作,对编辑器的语义理解很不友好,组件内自动重构(比如 vscode 的 f2/f12)基本就残废了(所以 vue3 会有新的 class 语法); 官方配件(router/vuex)和社区都流行直接往 Vue.prototype 上挂东西,this.$router this.$store this.$xxx 满天飞,照样不利于编辑器的语义理解,大项目里面很难简单地做项目内跨文件自动搜索引用/自动重构(还是 import/export 对编辑器比较友好); vuex 的 commit/dispatch 的魔法字符串语法,照样对编辑器语义理解不友好。 onClick 让人搞不清是传递一个函数还是一个函数的返回值
  • 区别在于用的人不一样,在我眼里它们都是完成工作的工具而已,工具就是工具。
  • diff 算法不同,响应式原理不同
  • 你回答:我只会 ag,ag 天下第一
  • 1、监听数据变化的实现原理不同 Vue 通过 getter 和 setter 来精确的改变数据 React 默认则是通过 diff 算法,将新的数据和老的数据作对比,然后重新渲染。 vue 的数据是可改变的,而 React 强调数据不可变。在使用上 Vue 更加的简单方便,而 React 则显得更加稳重一些 2.数据流的不同 vue 最开始是支持组件间的数据双向的,也就是子组件可以修改父组件的数据。并且也有 v-model 双向绑定的指令。 但是后来 vue 也废弃了前者,将组件间的数据双向流改成了单向流。 React 不支持数据双向,无论是组件间还是 dom 元素的双向都是不支持的。React 一直采用的都是 onChange/setState 模式。就是监听数据变化,然后调用 setState 方法生成新的数据。Vuex 和 Redux 都是单向数据流 3.框架本质不同 Vue 本质是 MVVM 框架,由 MVC 发展而来; React 是前端组件化框架,由后端组件化发展而来 ***最大的区别是两点:Redux 使用的是不可变数据,而 Vuex 的数据是可变的,因此,Redux 每次都是用新 state 替换旧 state,而 Vuex 是直接修改。Redux 在检测数据变化的时候,是通过 diff 的方式比较差异的,而 Vuex 其实和 Vue 的原理一样,是通过 getter/setter 来比较的,这两点的区别,也是因为 React 和 Vue 的设计理念不同。React 更偏向于构建稳定大型的应用,非常的科班化。相比之下,Vue 更偏向于简单迅速的解决问题,更灵活,不那么严格遵循条条框框。
  • 看用在什么地方。如果是开发游戏或者图形化软件二者都需要再次封装。比如我在独立开发 web 版 ps 软件时我就会选择 react,虽然偏重一点单灵活性大。改造成二维渲染引擎,我会将底层进行了在次封装将 css 和 canvas 重新整合到了一起来提高开发效率。目前 web 版 ps 测试画画效率不次于客户端软件。
  • vue 就是个前端框架,而 react 能干的事情就多了