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

8分钟详解React、Angular、Vue三大前端技术

时间:2023-03-31 20:34:26 vue.js

【简介】当今世界,技术发展非常迅速,变化也很快,开发者需要更多的开发工具来解决不同的问题。本文对目前主流的前端开发技术React、Vue、Angular做了比较详细的探索。目的就是揭开这些前端技术的面纱,一睹它们的真面目。[React]React(也称为React.js或ReactJS)是一个用于构建用户界面的JavaScript库。它由Facebook和一个由个人开发者和公司组成的社区维护。React可以作为开发单页或移动应用程序的基础。然而,React只专注于将数据渲染到DOM,因此创建React应用程序通常需要使用额外的库来进行状态管理和路由,Redux和ReactRouter分别是此类库的示例。基本用法下面是一个在HTML中使用JSX和JavaScript的React的简单示例。Greeter函数是一个接受属性问候语的React组件。变量App是Greeter组件的一个实例,其greeting属性设置为“HelloWorld!”。然后,ReactDOM.render方法在DOM元素(id为myReactApp)中呈现我们的Greeter组件。当在Web浏览器中显示时,结果将是:独特的功能组件化React代码由称为组件的实体组成。可以使用ReactDOM库将组件渲染到DOM中的特定元素。在渲染组件时,可以传入称为“props”的值。React中声明组件的两种主要方式是通过功能组件和基于类的组件。函数式函数组件函数式组件使用返回一些JSX的函数来声明。类组件基于类的组件使用ES6类声明。它们也被称为“有状态”组件,因为它们的状态在整个组件中保持不变,并且可以通过props传递给子组件。虚拟DOM的另一个值得注意的特性是React使用虚拟文档对象模型,也称为虚拟DOM。React在内存中创建数据结构缓存,计算变化的差异,只渲染真正发生变化的子组件,从而高效地更新浏览器显示的DOM。生命周期方法生命周期方法是挂钩处理程序,允许代码在组件生命周期内的设定点执行。shouldComponentUpdate允许开发人员通过在不需要渲染时返回false来防止不必要的组件重新渲染。componentDidMount在组件被“挂载”后调用(组件已在UI中创建,通常通过将其与DOM节点相关联)。这通常用于触发通过API从远程数据源加载数据。componentWillUnmount在组件被卸载或“卸载”之前立即被调用。这通常用于清理组件的资源依赖性,这些资源依赖性在卸载组件时不会被简单地删除(例如,删除与组件关联的任何setInterval()实例,或者在文档中设置的“eventListener”中)。render是最重要的生命周期方法,也是唯一必须存在于任何组件中的方法。通常在每次更新组件状态时调用它。JSXJSX,JavaScriptXML,是对JavaScript语言语法的扩展。JSX在外观上类似于HTML,它提供了一种使用开发人员熟悉的语法来呈现结构化组件的方法。React组件通常使用JSX编写,但并非必须如此(组件也可以使用纯JavaScript编写)。JSX类似于Facebook为PHP创建的另一种名为XHP的扩展语法。JSX代码示例:嵌套元素同一层次的多个元素需要包裹在一个容器元素中,比如上图中的

元素。属性JSX提供了一组元素属性,旨在与HTML提供的属性相对应。这些自定义属性也可以传递给组件,所有属性都将作为props被组件接收。JavaScript表达式JavaScript表达式(但不是语句)可以通过花括号{}在JSX中使用。上面代码的显示结果是:条件语句JSX中不能使用if-else语句,可以使用条件表达式代替。以下示例呈现{i===1?'true':'false'}作为字符串'true'当i为1时。结果将是:函数和JSX可以在条件表达式中使用:结果将是:用JSX编写的代码需要通过诸如此类的工具进行转换作为Babel之前它可以被Web浏览器理解,这个处理一般是在部署构建的应用程序之前的软件构建过程中。超越HTML的架构React的基本架构不仅仅用于在浏览器中呈现HTML。例如,Facebook有可以渲染到标签的动态图形,而Netflix和PayPal使用通用加载,在服务器和客户端渲染相同的HTML。ReactHooksHooks是允许开发人员从函数组件“挂钩”React状态和生命周期特性的函数。它们使代码更具可读性和更容易理解。Hooks在类组件内部不起作用,它的最终目的是消除React中类组件的存在。React提供了一些内置的Hook,例如useState、useContext、useReducer和useEffect。它们都在HooksAPI参考中进行了描述。使用最多的是useState和useEffect,分别在React组件中控制状态和检测状态变化。Hooks规则Hooks还有一些在使用Hooks之前必须遵循的规则:Hooks只能在顶层调用(不能在循环或if语句中)。Hooks只能在React函数组件中调用,不能在普通函数或类组件中调用。自定义Hooks构建您自己的Hooks,即所谓的自定义Hooks,它允许您将组件逻辑提取到可重用的函数中。自定义钩子是一个JavaScript函数,其名称以“use”开头,可以调用其他钩子。钩子的规则也适用于它们。常用术语React并不试图提供一个完整的“应用程序库”。它专为构建用户界面而设计,因此它不包含一些开发人员认为他们构建应用程序所需的许多工具。这允许开发人员选择库来执行网络访问或本地数据存储等任务。这种情况也决定了在创建Web应用时,React技术的标准无法统一。Flux架构的使用为了支持React的单向数据流概念(与AngularJS/Angular的双向数据流相反),Flux架构是流行的模型-视图-控制器(MVC)架构的代表性替代方案。Flux的特点是数据动作通过中央调度器发送到一个存储仓库,存储仓库数据的变化返回到视图。当与React一起使用时,这种传送是通过组件属性完成的。Flux可以被认为是观察者模式的变体。Flux架构下的React组件不应该直接修改传递给它的任何props,而是应该传递回调函数,可以创建调度程序发送的数据操作来修改存储仓库。数据动作是一个对象,其职责是描述已经发生的事情:例如,数据动作描述一个用户“关注”另一个用户。它可能包含以下数据:用户ID、目标用户ID和USER_FOLLOWED_ANOTHER_USER枚举类型。存储库是一种数据模型,可以根据从调度程序接收到的数据操作自行更改。这种模式有时表示为“属性向下流动,数据操作向上流动”。自Flux诞生以来,已经创建了许多Flux实现,其中最著名的是Redux,它具有单一存储库,通常被称为数据的单一真实来源。HistoryReact由Facebook的软件工程师JordanWalke创建。受PHP的HTML组件库XHP的启发,发布了React的早??期原型,称为“FaxJS”。它于2011年首先部署在Facebook的NewsFeed上,随后于2012年部署在Instagram上。2013年5月在美国的JSConf大会上开源。ReactNative于2015年2月在Facebook的ReactConf上发布。2015年3月开源的ReactNative实现了Android、iOS和UWP原生开发。2017年4月18日,Facebook宣布了ReactFiber,这是React库用于构建用户界面的新核心算法,ReactFiber将成为React库未来任何改进和功能开发的基础。2017年9月26日,React16.0正式发布。2019年2月16日,React16.8正式发布,引入了ReactHooks。创建项目常用命令:npxcreate-react-appmy-app开发环境运行:npmstart生产环境打包:npmrunbuild【官网】http://reactjs.org/【最新版本】16.13.1上2020年3月【授权】MITLicense[Angular]Angular(通常称为“Angular2+”或“Angularv2及以上版本”)是一个基于TypeScript的开源Web应用程序框架,由Google的Angular团队以及个人和企业共同开发形成社区领袖。Angular由构建AngularJS的同一个团队从头开始重写。Angular和AngularJS之间的区别Angular没有“范围”或控制器的概念,相反,它使用组件层次结构作为其主要架构特征。Angular有不同的表达式语法,强调属性绑定的“[]”和事件绑定的“()”模块化——许多核心功能已移至模块。Angular推荐使用微软的TypeScript语言,它引入了以下特性。(1)静态类型,包括泛型(2)注解TypeScript是ECMAScript6(ES6)的超集,向后兼容ECMAScript5(即:JavaScript)。使用RxJS提供的迭代回调动态加载异步模板编译。RxJS限制了状态可见性和调试,但这些问题可以通过ngReact或ngrx等响应式插件解决。支持AngularUniversal,可以在服务器上运行Angular应用程序。历史命名最初,AngularJS的重写被称为“Angular2”,但这导致了开发人员的混淆。为了澄清,该团队宣布每个框架使用不同的术语,其中“AngularJS”指的是版本1.X,“Angular”指的是版本2及更高版本。2014年10月22-23日在ng-Europe会议上公布了2.0版Angular2.0,2.0版的剧烈变化在开发者中引起了不小的争议。2015年4月30日,Angular开发者宣布Angular2已经从Alpha过渡到开发者预览版,2015年12月Angular2过渡到Beta,2016年5月第一个发布候选发布,2016年9月发布最终版本14号。版本4于2016年12月13日与Angular4一起发布,跳过版本3以避免路由器包版本放错造成混淆。当时发布的版本是v3.3.0。最终版本于2017年3月23日发布,Angular4向后兼容Angular2。Angular4.3版本是一个次要版本,它是4.x.x版本的替代品。4.3版功能引入了HttpClient,这是一个更小、更易于使用且功能更强大的HTTP请求库。为守护者和解析器提供新的路由器生命周期事件。四个新事件。GuardsCheckStart、GuardsCheckEnd、ResolveStart、ResolveEnd加入现有的NavigationStart等生命周期事件集。有条件地禁用动画。第5版Angular5于2017年11月1日发布。Angular5的主要改进包括对渐进式Web应用程序的支持、构建优化器以及与MaterialDesign相关的改进。Version6Angular6于2018年5月4日发布,在这个版本中,重点不在于底层框架,而在于工具链,更方便以后更新升级Angular,如:ngupdate,ng添加、Angular元素、AngularMaterial+CDK组件、AngularMaterial入口组件、CLI工作区、库支持、treeshake提供程序、动画性能改进、RxJSv6。版本7Angular7于2018年10月18日发布。与应用程序性能、AngularMaterial和CDK、虚拟滚动、Selects的可访问性改进相关的更新,现在支持使用Web标准内容投影的自定义元素,以及关于Typescript3.1、RxJS6.3、Node10(仍支持Node8)依赖更新。版本8Angular8于2019年5月28日发布。具有所有应用程序代码的差异加载、惰性路由的动态导入、网络工作者、TypeScript3.4支持以及可配置为预览的AngularIvy。AngularIvy预览版包括:生成的代码在运行时更易于阅读和调试。更快的重建时间减少有效负载改进模板类型检查向后兼容性版本9Angular9于2020年2月6日发布。版本9默认使用Ivy编译器。Angular与TypeScript3.6和3.7兼容。除了数百个错误修复之外,Ivy编译器和运行时提供了许多优势:更小的包更快的测试更好的调试改进的CSS类和样式绑定改进的类型检查改进的构建错误缩短构建时间,默认启用AOT功能,改进国际化功能和特性,组件化组件示例,Html部分,Typescript部分,路由数据管理,定义服务类,调用服务类,常用命令,从终端全局安装AngularCLI:npminstall-g@angular/cli使用ngnew命令创建一个新的AngularCLI工作区:ngnewmy-project-name开发环境操作:ngserve生产环境打包:ngbuild--prod[官网]https://angular.io/[最新版本]9.1.22020年4月15日【授权】MITLicense【Vue】Vue.js(通称Vue;读作/vju?/,类似于“view”)是一个开源的Model-view-viewmodelJavaScript框架,用于构建ing用户界面和单页应用程序。它由EvanYou创建,由他和来自Netlify和Netguru等多家公司的核心成员维护。概述Vue.js的特点是渐进式架构,专注于声明式渲染和组件组合。复杂应用程序所需的高级功能,例如路由、状态管理和构建工具,都是通过官方维护的支持库和包来提供的,其中Nuxt.js是最受欢迎的解决方案之一。Vue.js允许您使用称为指令的HTML属性扩展HTML。历史Vue是由EvanYou创建的。在Google工作期间,他参与了多个使用AngularJS技术的项目的开发,然后创建了Vue。他后来总结了他的思考过程。“我想,如果我可以提取AngularJS真正好的部分并构建一些轻量级的东西会怎么样?”该项目的第一个版本于2013年7月提交,Vue于2014年2月首次发布。特性组件化的Vue组件扩展了基本的HTML元素以封装可重用的代码。从高层次的角度来看,组件是具有Vue编译器附加行为的自定义元素。在Vue中,组件本质上是一个带有预设选项的Vue实例。下面的代码片段包含一个示例Vue组件。该组件显示一个按钮并打印该按钮被点击的次数。模板Vue使用基于HTML的模板语法,允许将呈现的DOM绑定到Vue实例的底层数据。所有Vue模板都是有效的HTML,可以被符合规范的浏览器和HTML解析器解析。Vue将模板编译成虚拟DOM渲染函数。虚拟文档对象模型(或“DOM”)允许Vue在更新组件之前在浏览器的内存中渲染它们。结合响应式系统,Vue能够计算出应用状态发生变化时需要重新渲染的最少组件数,并发起最少数量的DOM操作。Vue用户可以使用模板语法,也可以选择直接使用JSX编写渲染函数,这允许从软件组件构建应用程序。反应式系统Vue的特点是使用纯JavaScript对象和优化的重新渲染的反应式系统。每个组件在渲染期间跟踪其反应依赖性,因此系统确切地知道何时重新渲染,以及哪些组件需要重新渲染。变换效果Vue提供了几种在DOM中插入、更新或删除项目时部署变换效果的方法。这包括以下工具:自动应用CSS转换和动画的类集成第三方CSS动画库,如Animate.css等。使用JavaScript在转换挂钩期间直接操作DOM。集成第三方JavaScript动画库,例如Velocity.js等。当插入或移除转换组件内的元素时会发生这种情况:Vue会自动检测目标元素是否应用了CSS转换或动画。如果存在,将在适当的时候添加/删除CSS转换类。如果转换组件提供了JavaScript钩子,这些钩子将在适当的时候被调用。如果没有检测到CSS转换/动画,并且没有提供JavaScript钩子,插入和/或删除的DOM操作将在下一帧立即执行。路由单页应用程序(SPA)的传统缺点是无法共享指向特定网页内确切“子”页面的链接。由于SPA仅向用户提供基于URL的服务器响应(通常服务于index.html或index.vue),因此通常很难为某些屏幕添加书签或共享特定部分的链接,甚至是不可能的。为了解决这个问题,许多客户端路由器用“hashbang”(#!)来划分动态URL,例如http://page.com/#!/。然而,在HTML5中,大多数现代浏览器都支持不使用hashbang的路由。Vue提供了一个界面,可以根据当前URL路径更改页面上显示的内容——这可以通过多种方式完成(无论是通过电子邮件链接、刷新还是页内链接)。此外,当某些浏览器事件(例如点击)发生在按钮或链接上时,使用前端路由器可以有意识地转换浏览器路径。Vue本身并没有自带前端路由。但是开源的“vue-router”包提供了更新应用程序URL的API,支持后退按钮(导航历史),支持邮箱密码重置或邮箱验证链接的认证URL参数。它支持将嵌套路由映射到嵌套组件,并提供细粒度的过渡控制。添加vue-router后,组件只需要映射到它们所属的路由即可,parent/rootroutes必须指明子路由应该渲染到哪里。上面代码:在http://websitename.com/user/中设置一个前端路径。这将在(constUser...)中定义的用户组件中呈现。允许用户组件使用$route对象的参数键输入用户的特定ID:$route.params.id。该模板(根据传递给路由器的参数而变化)将呈现到DOM中div#app内的。最终生成的HTML将是:http://websitename.com/user/1:生态核心库自带的工具和库都是由核心团队和贡献者开发的。官方工具Devtools-用于调试Vue.js应用程序的浏览器devtools扩展。VueCLI-用于快速Vue.js开发的标准工具VueLoader-一种允许以单文件组件(SFC)格式编写Vue组件的webpack加载器。官方库VueRouter-Vue.js的官方路由器Vuex-基于Flux模式的Vue.js集中状态管理。VueServerRenderer-Vue.js的服务器端渲染。常用命令安装工具npminstall-g@vue/cli创建项目:vuecreatemy-project开发环境运行:npmrunserve生产环境打包:npmrunbuild【官网】https://vuejs.org/【最新版】2.6.1【授权】MITLicense2019-12-13【内容提要】本文对当前最顶级的前端技术做了详细的探索。前端技术的一个主要方向是单页面应用(SPA,SinglePageApplication)。我们在为这项业务选择前端技术时,需要考虑以下几个方面:1、会员目前的技能。这是一个很现实的问题。大多数程序员会选择自己比较熟悉的技术。在这里你要思考一下你目前熟悉的技术是不是最好的选择?2.可利用的学习时间。如果你发现你要用的技术需要一些时间去学习,这个时间成本会不会和开发进度冲突?3、能否保证项目的复杂度最低是一个关键因素。先进的技术之所以先进,是因为它可以让开发人员把时间和精力花在真正的业务开发上。如果要用的技术需要做很多与业务无关的配置,你需要问一个问题,有没有更好的?方法?最后,希望本文能为现有或未来的业务发展提供指导或参考。点击关注,第一时间了解华为云的新鲜技术~