共同点
- Virtual DOM
- 组件化
- 路由和状态管理独立于框架之外
- props父子组件传值(react可以传方法甚至组件)
- 服务端渲染
- 组件数据流向是单向的(父 -》 子)
区别
-
难易程度
vue:快速上手,应用于已有项目比较容易
react:学习成本相对较高,与已有项目结合相对复杂 -
模板
vue:template
react: JSX -
条件渲染、列表渲染 vue:指令:v-if、v-for...
react: {visible && }、{arr.map()}... -
diff算法实现
-
构建工具
vue: vie-cli
react: create react app -
chrome开发工具
vue: vue-devtools
react: react-devtools -
配套框架维护(路由、状态管理)
vue: 官方
react: 社区 -
开发原生应用
vue: weex
react: React Native -
更新渲染
vue: 粒度更细,默认优化(数据劫持,收集依赖)
react: 需要通过pureComponent或shouldComponentUpdate或memo手动优化 -
响应式(数据 =》 UI)
vue: js原生操作data
react: setState或hooks api(推荐函数式编程) -
双向数据绑定(UI => 数据) vue: 提供v-model语法糖
react: 需要开发者手动绑定事件,通过setState修改数据 -
逻辑复用
vue: mixin、自定义指令
react: 从mixin到高阶组件再到renderProps -
组件间传值 vue: props、$ref、provide + inject、vuex、++++++ $emit $parent $children、$attrs、$listeners
react: props、ref、Provider + Consumer、 redux -
应用场景
vue: 小而精
react: 大型复杂 -
社区活跃度,react更胜一筹
-
typescript支持,react更胜一筹(vue3有改进)
-
模式 vue:MVVM
react: MVC
类同
-
数据更新并渲染后执行相应的操作
vue: nextTick
react: useEffect -
组件标签中间插值
vue: 插槽slot
react: props.children -
祖孙传值
vue: provide/inject
react: context
更多资料
后续会继续补充,欢迎指正~