当前位置: 首页 > Web前端 > vue.js

我们为什么放弃Vue?Vue和React深度对比

时间:2023-03-31 23:21:13 vue.js

本人长期使用Vue和React,两个框架上的实际代码量都在10万行以上。不得不说都非常好,帮助开发者减少了很多工作量。某个框架就是一个现代化。Vue和React之间的选择并不像选择苹果或香蕉那么简单。两者的工程实践差异让我们逐渐放弃了Vue。在这里,我们从不同的角度对彼此进行深度比较。常见的挥杆问题、观点首先,我将谈谈常见的比较项目和观点。这些部分可以通过一些文章或者Vue官方对比文档找到。主要目的是帮助小白解决入门问题。如有异议,欢迎在评论区留言Battle,反正我不会回答你的问题。Vue或React文档更丰富?两者都有丰富的文档(包括中文文档),Vue文档,React中文,不用担心过不了4级,看不懂文档。都是眼力问题~当然如果你提前了解javascript方面的知识也很好,ES6语法更好,可以在这里向阮老师学习,免费电子书。文档和持续改进不是您在两个框架之间进行选择的原因。对于Vue,你需要记住各种指令和属性细节,所以你不可避免地会经常查看文档。React比较简单,记住:“函数入口是props,出口是html”。React学习门槛高?这不是你选择框架的原因。如果这也能成为原因,我想是因为你懒惰,给自己找借口。根据自己的学习和实践总结,这两个框架都很简单。如果你有手,你可以做到,但如果你有大脑,你也可以做到。它并不一定意味着你可以做出反应,所以它比Vue.js好得多。都提供了相应的脚手架供用户使用:vuenpminstall-g@vue/clivuecreatemy-projectreactnpxcreate-react-appmy-appcdmy-appnpmstart傻瓜式使用,无限div就大功告成了。React用于大型项目,Vue用于小型项目。我在华为的时候,经常在内部讨论两个框架的对比。你是什??么意思?这是万精油的标签,没有参考意义。你如何定义一个项目是一个大项目?超过xx万行代码?超过xxx个后端API?无论什么样的项目,都有变“大”的可能。只要它在正常运作,你就得继续维持和补充补充需求。框架的可替换性更为重要。当然我可以告诉你,我不知道适度响应不适合“小”项目,但是Vue不适合“大”项目。业务代码超过5万行后,问题就很明显了。稍后我将对此进行详细解释。XX大公司也在用Vue,我们就跟着。很多新手都是从一些框架或者选择组件入手。做方案的时候,他们会看看有哪些大公司已经用过了,以免踩到自己的脚。当然,我也可以。但大公司可能只是将其用作“尝鲜”和“实验”。这些项目彼此无关。如果选型失败,压力将交给开发工程师。996个批改就够了,还有你,╮(╯▽╰)╭项目还得跟狗屎一样维护。举个选型错误的例子,看看大公司如何挽救。华为做硬件项目的时候,用的原理图软件堪称热鸡。我想砸电脑。历史问题,选型错误,但是很多项目,基础库就在上面,只能硬着头皮,迁移成本太高,软件厂商水平太差,不过华为给力,放该软件发生了重大变化和特殊变化。上面集成了各种内部数据库,各种自研的辅助工具,还是可以开发出非常强大的产品的。该部门制造的单板已连续11年位居世界第一。(PS:之前用tcl写脚本,也可以试试蛋芽痛)-如果你觉得选错了导致的问题你能解决,或者你是华为的,那我们再说吧。Vue模板简单,Reactjsx有学习成本同上。两者都很简单,学会了就可以学会。连这玩意都叫学习成本,我只能说:“我不是针对你,我是说在座的各位……”(Vue模板工程实践问题很多,后面会详细讲)为了性能对比一下,可以看看这个第三方benchmark测试,都挺快的。但是在实践过程中我们发现了差异,比如大列表渲染,大量数据加载,没有进一步优化的Vue明显比React慢。我们之前都是用Vue写TaskHub网站,然后直接迁移到React。想到之前写了这么多,╮(╯▽╰)╭,下面是重头戏,写一下实践过程中发现的问题,以及两个框架的解决思路。如果你还是新手,下面的一些东西可能不会接触,可以看看这篇文章:【翻译】通过创建同样的APP,比较React和Vue,实现它,了解基础知识。市场份额相关的npm下载量见上图,市场已经用脚投票了。看这里,如果你只是想了解评选代表,可以去。如果你还说xx大公司在用vue,跟着走。可以说大公司用React比较多,使用Vue的目的就是为了保留相关的技术栈能力,多一种选择,避免React授权事件的再次发生。React的许可协议到底怎么了?Facebook承认了React专利,但问题还是没有解决?当然游达这里也说了,看npm的下载量是没有用的,实际使用还是要参考devTool的下载量。但是……为什么我打开的很多网站下面这个标记都是亮的?开发生态客观来说,作为核心团队成员,我们意识到自己会更喜欢Vue,认为用Vue来解决一些问题会更好。没有这个信念,我们就不会整天忙得不可开交。但在那之后,我们要调整以公平准确地描述一切。其他框架也有显着的优势。比如React庞大的生态系统,与官方的Vue生态有明显的区别。Vue官方承认了这一点。很多人因为生态迁移到React,但我不太关心,Vue生态还不错。你说你用React生态,你会觉得牛逼,你的core也会用。这不会给你的产品带来多少附加值。竞争力还是要看自己的代码。好的。下面简单介绍一下:这两个UI组件的周边UI库都挺丰富的,反应稍微多一点,但这不是选型的关键。自己写UI库并不难。偶尔封装原生标签也很简单。.以前用Vue的时候,没有UI库。自己手动写了一个功能比较齐全的UI库,打包了一个总结,也就两万行左右的代码。Dom相关的第三方库Vue和React都有可以操作dom的refs,自己封装起来也不难。可以看看别人有没有打包,用来学说。Vue:访问子组件实例或子元素React:Refs和DOM小程序(重点补充)有小程序开发经验的同学都知道,小程序的原生开发是非常痛苦的,通常需要串行框架封装和代码转换。常用框架有几种:taro(React技术栈,推荐)wepy(Vue技术栈,强烈不推荐)uni-app(Vue技术栈,可用)这些小程序开发框架都是基于Vue或React二次封装,简化开发的小程序。Vue的一些外围库是和Vue强绑定的,而不是以一个独立的js库的形式存在。导致代码难以理解,相关的bug和问题也被带入二次开发的框架中。这种强依赖带来的问题会给以后的项目升级和迁移带来很多问题。比如vuex,作为Vue官方推荐的状态管理方案,只能在Vue上使用,不能在camp上使用。redux的状态管理在camp中用的比较多,但是这个在vue中可以用。类似的问题还有很多,你会发现React周围的东西在Vue里可以用,Vue里的东西在React里用不了。如果你觉得这个问题不严重,当你将Vue代码迁移到小程序wepy框架时,你会发现wepy不支持Vuex(bug异常多),只能使用redux进行状态管理。同样的问题,如果使用React相关的技术栈,将React迁移到Taro小程序框架非常简单,一次性生成微信小程序、支付宝小程序、字节跳动小程序等,代码占用率高的。我对APP生态weex、rn没有很好的实战经验,有些生产计划要慎重考虑。很明显rn比weex更成熟。总编译代码组Vue三种组件写法对比(Js部分)对比API29行importVue,{PropOptions}from'vue'interfaceUser{firstName:stringlastName:number}exportdefaultVue.extend({name:'YourComponent',props:{user:{type:Object,required:true}asPropOptions},data(){return{message:'Thisisamessage'}},computed:{fullName():string{返回`${this.user.firstName}${this.user.lastName}`}}})API类17行import{Vue,Component,Prop}from'vue-property-decorator'interfaceUser{firstName:stringlastName:number}@ComponentexportdefaultclassYourComponentextendsVue{@Prop({type:Object,required:true})readonlyuser!:Usermessage:string='Thisisamessage'getfullName():string{返回`${this.user.firstName}${this.user.lastName}`}}功能API25行importVuefrom'vue'import{computed,value}from'vue-function-api'interfaceUser{firstName:stringlastName:number}interface你rProps{user?:User}exportdefaultVue.extend({name:'YourComponent',setup({user}:YourProps){constfullName=computed(()=>`${user.firstName}${user.lastName}`)constmessage=value('Thisisamessage')return{fullName,message}}})React两个组件写法比较(Js部分)classcomponent34行importReact,{Component}from'react';interfaceP{}interfaceS{}classIndexextendsComponent{constructor(props:Readonly

){super(props);this.state={};}staticdefaultProps={};componentDidMount(){}componentDidUpdate(prevProps:Readonly

){}componentWillUnmount(){}render(){return(

);}}导出默认索引;functioncomponentline15importReact,{FC}from"react";interfaceProps{}constIndex:FC=(props)=>{//js代码return(
);};Index.defaultProps={};导出默认索引;injs逻辑部分没有错,需要用到框架特有的生命周期钩子,vue类写法方法最简洁(3种比较),响应函数的写法最清晰(所有写法比较)。这部分不是选择的重点,怎么写是个人喜好。组件内状态管理Vue使用数据对象(data),响应使用状态对象(immutablestate)。在这方面,两个框架的设计不同,下面的解题思路也不同。如何修改数据?Vue直接直接修改这个引用数据对象。React如何使用setState方法修改框架发现数据被修改了?Vue使用es5新方法Object.defineProperty劫持setters和getters来实现数据监控。React,你用setState,它通过这个函数知道一些数据的变化。我如何知道数据已被修改?Vue:使用观察者,或者计算属性来发现反应:componentWillUpdate,componentDidUpdate可以监听变化,或者一个函数组件的依赖部分被插入到框架中。渲染修改后的数据时,我怎么知道它已经被渲染了?Vue:适时渲染,可以通过watcher,或者computedproperties找到反应:调用setState后适时重新渲染,并调用相关的生命周期钩子。它们在组件状态管理功能上都没有太多槽点。要说Vuewatcher写了一大堆代码,一堆缩进,更严重,反响也好不到哪去。Vue的写法比较简单,但是组件状态比较多。当需要清晰的数据更新逻辑时,简单的响应setState({},callback)将完成它。Vue有点混乱。Vue项目解决bug和疑难杂症的三大定理。没有什么是深度观察解决不了的。如果有,添加immediateeventrelated,domrelated。请记住nextTick确实不起作用,因此在应用程序复杂时使用setTimeout(来自高级)React的不可变(immutable)状态透明度和更好的可测试性。对比上面的内容,我觉得都还可以,功能也还行。Vue的生态没那么好,但是你可以自己做。这就是我们真正弃用Vue的原因。VasuedBuyabuyode说:同样的问题,在语言层面的解决方案是最好的解决方案。语言生命周期比框架生命周期长。模板语法VSJSX部分缺少Vue的单文件组件。直接使用