Skip to content

Latest commit

 

History

History
16 lines (16 loc) · 9.31 KB

File metadata and controls

16 lines (16 loc) · 9.31 KB

react vs vue 不同点

react vue
设计思想 react主张函数式编程,所以推崇纯组件,数据不可变,单向数据流 一款渐进式框架,采用自底向上增量开发的设计,基于可变数据,支持双向绑定
编写语法 推荐的做法是 JSX + inline style,没有模板,纯js渲染函数 vue推荐的做法是webpack+vue-loader的单文件组件格式,也支持html、css、js整合与分离写法,支持JSX语法
数据绑定 单向数据流,react组件中属性是不允许直接更改,需通过setState传入一个对象来进行更改,setState函数是异步的 双向数据绑定的mvvm框架,View的变化可以改变model,同时model变化可以出发view更新,通过直接更改vue组件属性
组件数据交换 【父子组件数据交互】 react中父组件使用props传递数据给子组件,子组件通过父组件在props提供的回调函数传递数据给父组件;【跨组件数据交互】通过react内置Context技术获取父子数据 【父子组件数据交互】:父组件经props传递数据到子组件,子组件使用$emit触发自定义事件,父组件通过v-on监听子组件的自定义事件获取来自子组件的数据, 或通过子组件$emit('xxx:update')父组件v-bind.sync="xxx"更新props数据;【跨组件数据互交】: 通过祖先组件向所有子孙后provide一个依赖 / 目标子组件注入inject指定依赖属性
diff算法 React会逐个对节点进行更新,每当应用的状态被改变时,全部组件都会重新渲染,diff总共就是移动、删除、增加三个操作,如果遇到重复标签,根据唯一的标识(key)优先采用移动的方式,找到正确位置插入新的节点 vue会跟踪每一个组件的依赖关系,把新的虚拟dom树与上一次的虚拟dom树树进行一次平层的比对,不需要重新渲染整个组件树,只更新差异部分
构建工具 create-react-app无任何配置项 vue-cli完整的模板,包括单元测试在内的各种内容都涵盖
指令 不支持指令 支持指令
循环实现 使用map循环读取数据,返回JSX 使用v-for指令
性能优化 当数据更改触发视图层更改时候,可使用shouldComponentUpdate生命周期函数控制组件是否重新渲染,避免不必要的dom操作 vue里面由于依赖追踪系统,每一个组件都精确地知道自己是否需要重绘,数据特别多的时候vue中的watcher也会特别多,造成页面卡顿
原生渲染native react native是Facebook开源的跨平台UI框架,需配置较多依赖工具,需针对iOS、Android不同编写2份代码,react native的社区非常成熟活跃 weex是阿里巴巴发起跨平台用户界面开发框架,一份代码支持Web、iOS、Android,社区处于成长期
服务端渲染 Next. js 内置页面搜索引擎优化(SEO)处理,支持CSS-in-JS库 Nuxt.js 强大的路由功能,支持异步数据,集成 ESLint支持各种样式预处理器
生命周期 (初始化阶段)getDefaultProps,getInitialState,componentWillMount,render,componentDidMount,(运行中) componentWillReceiveProps,shouldComponentUpdate,componentWillUpdate,render,componentDidUpdate,(销毁阶段)componentWillUnmount,componentDidMount (初始化)beforeCreate,created,beforeMount,mounted,(运行中)beforeUpdate,updated,(销毁阶段)beforeDestroy,destoryed
状态工具 Redux:store定义状态,使用createStore新建。 使用reducer定义数据处理函数,需要返回一个新的状态给store,使用action定义一个指定触发reducer与reducer参数,使用dispatch触发,使用subscribe注册监听数据 vuex,引入State,Getter对状态进行定义, 使用Mutation(同步)和Action(异步)对状态进行变更,引入Module对状态进行模块化分割