英语原文共 5 页,剩余内容已隐藏,支付完成后下载完整资料
使用ReactJS的现代Web开发
Sanchit Aggarwal
摘要:ReactJS是一个基于组件的库,用于开发交互式用户界面。目前它是最流行的前端JS库。它将视图(V)层合并为M-V-C(模型视图控制器)模式。它得到了Facebook、Instagram和个人开发者社区和组织的支持。React基本上可以开发大型和复杂的基于Web的应用程序,这些应用程序可以在不刷新后续页面的情况下更改页面数据。它的目标是提供更好的用户体验,以及快速而强大的Web应用程序开发。ReactJS还可以与MVC中的其他JavaScript库或框架集成,例如AngularJS。
关键词:应用程序开发、React、ReactJS、MVC、虚拟DOM节点、前端开发。
引言
ReactJS是用于开发可重复使用的用户界面(UI)组件的JavaScript库。根据React官方文档,其定义为——React是用于构建模块化用户界面的库[9]。React基本上可以开发大型且复杂的Web应用程序,这些应用程序可以在不刷新后续页面的情况下更改页面数据。它被用作模型-视图-控制器(MVC)中的视图(V)。React抽象了文档对象模型(DOM),从而提供了一种简单的、可执行的和健壮的应用程序开发体验。React主要使用NodeJS在服务器端进行渲染,并使用React Native提供对本地移动应用程序的支持。React实现了单向数据流,从而简化了模板文件,因此证明了单向数据绑定比传统的数据绑定容易得多。
特征
轻量级DOM(文档对象模型)可以获得更好的性能
React提供了一个非常高效和轻量级的文档对象模型。它不与浏览器生成的DOM交互,而是对存储在内存中的文档对象模型做出反应。这给应用程序带来了快速和健壮的性能。在大多数其他的Web开发框架中,与浏览器DOM进行直接交互,从而在每个页面触发事件时对整个DOM树进行操作。因此,当大量数据需要被修改的时候,性能会受到严重影响。相反,ReactJS使用虚拟DOM进行交互。它的工作相当简单。使用diff()算法将虚拟DOM和实际DOM进行比较,并且只有节点会改变,并反射回文档对象模型树[11]中。
易学曲线
ReactJS的简易性使用户能够快速上手使用框架,学习曲线极其简单,没有复杂度。体系结构非常简单,使用JSX可以带来完全自然和令人愉快的现象,这能让开发人员很容易与框架相处。在框架中,初始专业水平可以很容易地实现,不存在任何障碍或复杂性。
JSX
JSX是一种跟XML极其相似的语言。在开发基础的React应用程序时,并不强制使用 JSX,但是它的简易性使得它在开发人员之间非常流行,每当开发人员为组件和相应的绑定事件编写标记时,使用JSX能将开发过程变得简易。选择轻松和不复杂的技术是人性的趋势,这使得JSX非常流行。
性能
众所周知,ReactJS是一个高效的执行者。这是使这个框架在竞争环境中脱颖而出的关键因素之一。框架的高性能的原因是框架的虚拟DOM特性。ReactJS在内存中维护了一个虚拟文档对象模型。每当要将更改反映到当前呈现的页面,首先对虚拟DOM进行更改,而非立即更新浏览器的DOM结构。在对虚拟DOM做出更改之后,应用diff()算法对更新了的虚拟DOM和浏览器的DOM进行比较,,只更新了浏览器DOM树的相关节点和所需节点,从而实现了应用程序的高性能。
单向数据流
ReactJS ID的设计方式允许并支持下游的单向数据流。需要ID双向数据流,需要实现附加功能。这样做是因为组件需要是不可变的,并且在任何情况下它们中的数据都不能更改。因此,只监听来自一个方向的数据,而不监听来自其他方向的数据。此后,react.js以生成规范化数据源而闻名,这些数据源在关注它的组件之间保持同步。因此,它被证明是开发Web基础交互式应用程序的最佳框架之一。如果要对上游数据进行某些更改,使用该数据的组件将自动重新渲染来反映相应的更改。这就是为什么它们必须与流向下游的数据同步的原因。React.js中的Flux提供了类似的数据绑定样式,它能够替代模型视图控制器(MVC)。
虚拟DOM
ReactJS的另一个关键特性是它的虚拟DOM(虚拟文档对象模型)。它和浏览器生成的文档对象模型时相似的,不同的是,虚拟的DOM存储在内存中。虚拟DOM的工作非常简单。每当一个请求要更改页面内容时,所做的更改将先反映到存储虚拟DOM的内存中。之后,diff()算法比较虚拟DOM和浏览器DOM,只将所需的更改返回到浏览器DOM,而不是重新渲染整个DOM结构。这对应用程序的性能带来了巨大的提升,尤其是在需要进行数千次数据更改时。
工作
在用户界面开发时,模型视图控制器(model view controller)或M-V-C设计范式是很流行并且很基础的,这不仅在Web应用程序中,而且在运行在任何平台上的前端应用程序中。DOM表示Web应用程序的物理视图。DOM是通过HTML模板生成的,该模板本身是从其他文件、脚本或预编译模板函数中提取的。文本模板被视图实体赋予了作为DOM的生命。作为生命周期的一部分,它在处理事件和操作文档对象模型树方面扮演着关键的角色。只有当视图使用户交互成为可能并显示所需数据时,它才是有用。
数据是从某个数据存储体带来的实体,这个存储体可以是数据库、Web服务器或本地存储。框架提供了一种将视图绑定到数据存储的方法,以确保对数据库所做的更改能够自动反射回来。这种数据自动更新推送的过程通常被称为数据绑定。有许多应用程序接口或API使得这个过程变得很简单。
如图1[1-2]所示,M-V-C范式由C(控制器)组件完成,它与其余两个组件(模型和视图)相结合,使数据模型流入视图,用户事件不在视图中,最终导致模型发生变化。
图1 M-V-C组件的交互
为了理解React如何管理所有的任务,需要对组件有更深入的了解。组件是React中的主要构建块。整个用户界面可以通过组装多个组件构成的树来设计。
中间DOM由每个react组件中的render()方法生成。如图2所示,在根组件上调用React.rendercomponent()方法会导致递归地遍历组件树并生成中间DOM。然后,中间DOM被转换为实际的HTML DOM。
图2 从中间DOM到HTML DOM的转变
React使用一个基于XML的Javascript扩展语言(称为JSX),将组件树作为多个XML节点的组合生成。这使得DOM可视化和理解变得简单和方便。JSX在将事件处理程序和属性的关联简化为XML属性方面也起着关键作用。最后一个Javascript是使用命令行和浏览器工具生成的。组件由JSX XML节点直接映射。需要注意的是,React独立于JSX工作,而使用JSX只起到简化生成中间DOM任务的作用。
组件生命周期
ReactJS框架中的所有组件都有一个非常特殊的生命周期,并且包含一个具有三种不同状态的状态机。
装载过程为组件提供了生命。当通过渲染过程传递装入时,将生成组件树或中间DOM。然后将此树转换并放置到真正的文档对象模型的容器节点中。当调用React.rendercomponent()方法时,所有这些过程都会发生。
如图3所示,装载完成后,组件仍处于更新状态。当使用setState()方法更改状态或使用setProps()方法更改属性时,任何组件将会更新。然后调用render()方法,将文档对象模型与属性和状态数据同步。React计算先前的组件树和之后更新的新生成的树之间的差异
这一步是高度优化且最大限度地减少真实的DOM操作的特色。最后一个状态是被卸载。如果在render()调用中,一个组件不再被生成为子组件,则会自动发生卸载过程。大多数情况下,开发人员不必担心这一点,只要允许React执行所需的操作。
现在,如果在装载-更新-卸载状态之间切换时没有通知React,这将是一个很大的疏忽。但情况并非如此,提供的钩子可以超载,目的是在状态发生变化时发出通知。
图3 React组件的生命周期
差异
在MVC范式中,有了模型、视图和控制器,视图部分具有突出性,并被打包成一个称为组件的实体。一个称为props的不可变属性集和一个表示用户界面的用户驱动状态的状态由组件维护。React组件的视图生成部分,将其变得具有强烈的趣味性和友好性,并使其在市场上的其他框架中脱颖而出。并非直接与浏览器DOM交互,取而代之的是在内存中维护一个虚拟的DOM,虚拟的DOM与实际的浏览器的DOM进行比较后,将更改推送到真正的DOM中
事件处理和数据绑定作为中间DOM生成的一个组成部分执行。在解释语言的情况下,语言运行时(又称虚拟机)也采用类似的策略。最初的JavaScript运行时在显示本地代码之前生成一个中间表现。在生成最终的HTML DOM之前,React巧妙地生成了一个中间文档对象模型。中间文档对象模型只是一个Javascript对象图,不直接渲染。真正的文档对象模型是在翻译过程之后生成的。这是一种能够实现快速的DOM操作并使React在市场上其他框架中脱颖而出的技术。
局限性
在任何项目开发时选择React之前,React也有一些限制必须考虑。限制有以下几点:
- React只处理移动视图控制器或MVC中的视图实体。因此,需要额外的工具来完成项目开发。
- 对于部分开发人员来说,使用内联模板和JSX有时会是一项非常复杂和繁重的任务。
- 同样,在ReactJS像其他语言和框架一样,失败往往发生在编译的时候而不是运行的时候,这有时会非常令人沮丧和疲劳。
结论
尽管ReactJS有一些小缺点,但它一定是一个有把握的游戏改变者。现代网络变的更加动态化,用户可交互性愈来愈复杂。用户体验设计趋势不断变化和演变。现在客户端脚本确保只推送必要的和基本的数据,在整个Web上保持无缝的、令人愉快的体验。它是当今世界对方便、高效和易用性的需求。ReactJS强大的功能和特性,可以满足当今趋势的需求。简而言之,可以说ReactJS肯定会影响到为Web编写应用程序的方式。
致谢
如果没有新德里北印度工程学院信息技术学院的Jyoti Verma女士的支持,这项工作是不可能的完成的,她不仅在这项研究中给予全力支持,也在我的职业目标中也给予了大力支持,为我提供了受保护学术时间,让我去追求这些目标的。作为我的老师和导师,她教我的东西比我在这里所能给予她的荣誉还多。她以身作则,向我展示了一个好老师(和一个好人)应该是什么样的。在追求这个项目的过程中,没有人比我的家人更重要了。我要感谢我的父母,无论我追求什么,他们总是疼爱和指导着我。他们是最终的榜样。
参考文献
[1] Wikipedia.org, React (JavaScript Library). [Online]. Available: https://en.wikipedia.org/wiki/React_(JavaScript_library). [Accessed: Feb- 2018]
[2] MongoDB.com, MEAN and MERN stacks. [Online]. Available: https://www.mongodb.com/blog/post/the-modern-application-stackpart-1-introducing-the-mean-stack [Accessed: Feb- 2018].
[3] Google trends,rsquo;Google Trendsrsquo;,[Online]. Available : https://www.trends.google.com . [Accessed: Feb- 2018]
[4] Quora.com, lsquo;MEAN VS. MERN. [Online]. Available: https://www.quora.com/How-is-MERN-stack-compared-to-MEANstack. [Accessed: Feb- 2018]
[5] Angular.io, Angular Documentation. [Online]. Available: https://angular.io. [Accessed: Feb- 2018]
[6] MongoDB.com, MongoDB official. [Online]. Available: https://www.mongodb.com/. [Accessed: Feb- 2018]
[7] ExpressJS.com, lsquo;Express official. [Online]. Available: http://expressjs.com. [Accessed: Feb- 2018]
[8] NodeJS.org, lsquo;NodeJs official. [Online]. Available: http://nodejs.org. [Accessed: Feb- 2018]
[9] ReactJS.org,rsquo; ReactJS official. [Online]. Available: http://www.ReactJs.org. [Accessed: Feb- 2018]
[10] Github.com, lsquo;React Documentation. [Online]. Available: https://g
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[19814],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。