简而言之,React 使用 AJAX。它们与您所要求的方式无关。
继续阅读速成课程,了解 React 是什么、AJAX 是什么以及如何使用它们来构建现代 Web 应用程序。
这可能是比您正在寻找的更简单的解释,但对于其他可能感到困惑的人......
AJAX 和飞机
想想一个Airplane。飞机最重要的部分是它会飞。但飞机也有wheels。轮子有一个非常重要的用途,因为没有它们,飞机将永远无法飞行或着陆,尽管飞机可以在空中做所有令人惊叹的事情,但如果没有轮子,一切都毫无意义。
这与以下关系相同React有与AJAX。 React 是飞机,AJAX 是轮子。但是,你知道,其他东西也有轮子。拖拉机、汽车,甚至有些船都有轮子,它们都非常重要,没有轮子就变得残废了。 AJAX 对于其他 Web 技术也是如此,但是当您谈论的是飞机, its wheels通常是离你的想法最远的事情。
So React is to AJAX,什么是Airplane is to Wheels.
但我们来谈谈 AJAX。它是什么?为什么它如此重要?如今它在网站中的使用方式。然后我将展示 React 如何使用它。然后向您展示 React 做了哪些令人印象深刻的事情,它让您忘记 AJAX - 就像飞机转动轮子一样。
还记得 90 年代的网站吗?
当您单击任何内容时,都必须加载一个新页面来显示您单击的效果 - 即使什么也没有。这是一个很棒的例子 http://toastytech.com/evil/。转到该页面并单击...看看单击如何将您带到完全不同的页面?这就是 AJAX 之前的互联网。
现在,看看这一页:每个答案旁边都有一个向上箭头...继续并单击其中一个...注意页面不会重新加载,但您会收到反馈:箭头变成橙色。这可能看起来微不足道,但它代表了 Web 技术的巨大进步:AJAX,或更准确地说:Web 开发的 AJAX 方法。
AJAX 方法允许这种情况发生!现在这没什么大不了的;它是网络体验的本质,很难想象没有它的互联网。
AJAX 和钟面
AJAX 方法及其如何改变 Web 的一个很好的类比是一块简单的手表或挂钟……想象一下分针、时针和秒针绕着钟面移动以显示时间。现在,假设秒针的每一次移动都会导致整个时钟被摧毁和重建?
所有这些努力摧毁和重建只是为了显示一个微小的变化?!嗯,这将是对资源的极大浪费,这就是 90 年代的互联网。值得庆幸的是,我们现在有了 AJAX。就像时钟无缝地显示时间一样,AJAX 可以让网页立即显示数据的变化,而不需要刷新页面;单击向上箭头,它会变成橙色。无需重新加载页面!
最初,AJAX 只是一起使用现有技术向用户显示简单更新的名称,但它已成为 Web 体验的固有特征,除非您知道自己在做什么,否则您甚至不知道自己在做什么使用它。例如,fetch自 2015 年以来,这是实现 AJAX 方法的首选方法。在此之前,它是 XMLHttpRequest - 尽管 JSON 更频繁地用于传输数据,因为它不太冗长。 JQuery 是唯一真正支持 AJAX 的 Web 技术($.ajax()
)据我所知,但您通常不会(也不应该,除非您真的知道自己在做什么)将 JQuery 与 React 应用程序一起使用。
AJAX 的工作方式就像网页一样:
- 用户执行操作(例如按向上箭头)
- 客户端(如 Firefox 等 Web 浏览器)从服务器(如 Stack Overflow (SO) 服务器)请求数据。
- 服务器处理请求(更新数据库以记录赞成票)。
- 服务器将响应发送回客户端,说明操作是否成功。
- 最后,一些已经加载到网页中的代码决定如何处理这些新信息(在我们的示例中,javascript 将向向上箭头添加一个类,CSS 规则将规定具有该类的元素为橙色)。
- 用户只能看到箭头是橙色的。所有其他步骤都是隐藏的,因此看起来像是一个无缝的响应式操作。
单页应用程序
由于我们不会在每次点击时重建整个页面,因此您可以将有关该网站的信息存储在浏览器中。这可以在您的整个访问和以后的访问中使用。
第一次访问 Stack Overflow 时,所有 CSS、JS 和 HTML 都会被加载。这三种语言定义了从服务器来回发送的数据的样式(CSS)、行为(JS)和结构(HTML)。猜猜这些数据是如何发送的!阿贾克斯。
这就是现在大多数网络的工作方式。 Google、Facebook、Amazon、Youtube、Reddit、每个使用 WordPress 和 WIX 构建的网站,甚至 Stack Overflow - 他们都使用这种基本范例来有效地将其网站交付给用户。区别在于单页应用程序的构建和管理方式......
React.js
React https://facebook.github.io/react/是一个用于构建和维护的 javascript 库单页应用程序 https://flaviocopes.com/single-page-application/.
但这也没什么大不了的。 React 的重要之处在于它如何允许您构建应用程序......
基本上,您单独构建事物,然后将它们组合在一起:组件组合在一起形成应用程序。因此,请看一下此页面上所有答案的完全合理但虚假的代码:
answerArray.map(a => <Answer answerData={a}></Answer>)
这一行显示了该页面上的大部分信息。这是一件大事。 Stack Overflow 的开发人员创建了自己的组件,称为“Answer”,其唯一的工作就是显示答案。你循环运行它,然后砰的一声,所有答案的所有复杂性都是抽象的,隐藏在答案组件中,与其他组件完全分开。
现在看看这个:
<App>
<Header />
<LeftSidebar />
<Question>
{ answerArray.map(a => <Answer answerData={a} /> )}
</Question>
<RightSidebar />
<Footer/>
</App>
这是整个 Stack Overflow 网站。
每个标签(标题、问题、答案等)都是一个组件。这些组件是完全独立的,并且具有独立的代码,但在这里它们一起使用来构建更复杂的应用程序。
作品
React 的一个重要概念是组合,我们上面刚刚定义了它。 “组合允许您通过组合小型且集中的功能来构建更复杂的功能”(黄维科普斯 https://flaviocopes.com/react-composition/)。我们的应用程序由较小的组件组成。
同样重要的是要注意每个组件都包含其自己的功能。这意味着如果用户单击按钮并出现警告,则该按钮和使警告出现的代码位于同一组件中。
函数式编程
令人惊讶的是,我们也已经定义了这一点。对于我们的目的来说,函数式编程意味着 1. 对象; 2. 他们的行为方式;都在同一个地方。就像上面的按钮示例一样。单击按钮,收到警告。这些都在同一个文件中。
这与 React 之前的开发不同,在 React 之前的开发中,所有按钮都位于一个文件中,而按钮的所有效果都位于另一个文件中。这不一定是错误的做事方式,但对于 Web 开发来说,更容易考虑独立的构建块,而不是广泛分散且无法单独工作的工具。
为什么你不应该关心胡子和车把
这两项技术已被 React 蚕食。与 React 使用 AJAX 的方式类似,但让它更容易,Mustache 和 Handlebars 已经在 React 内部,并且您一直在使用它们,甚至不知道。对我来说,没关系。有相反的论据,知识从来都不是坏事,所以如果你愿意的话可以进一步调查,但这已经足够长了,所以我就说这么多。
相反,我会告诉您 3 项您应该关心的技术。
相反,你应该关心什么...
Node
Node.js 的要点是它在浏览器之外执行 JavaScript。大呼,对吧?事实证明,这是有史以来对 Web 开发人员最有影响力的进步之一。事实上,下载 Node 通常是在下载 React 之前完成的。
节点之所以重要有两个重要原因:
- 它可以让你下载其他东西
- 它允许您在将 JavaScript 发送到浏览器之前对其进行处理
我可以写很多关于 Node 的内容,但你从中得到的收获应该是“Node 很重要,我应该寻找更多关于 Node 的知识以及它与 React 和 Web 开发的关系。”
NPM
NPM https://en.wikipedia.org/wiki/Npm_(software)并不代表“Node Package Manager”,但它应该代表“Node Package Manager”,因为这正是它的作用。 React、SASS、Angular、Vue,几乎这里提到的所有内容您都可能会使用 npm 来安装和保持更新。
Webpack
Webpack https://webpack.js.org/是一个“模块捆绑器”。它将您所有的 js 和 css 文件写入一个文件,这样您只需编写一个文件<script>
tag.
每个 React 组件都会有至少一个与其关联的 js 文件。每个组件也应该有自己的文件。跟踪所有这些文件的要求非常高。 Webpack 为您做到了这一点,它只是让生活变得更轻松,所以尽早了解它,不要回避它。
这是 React Apps 固有的东西,大多数时候它只是在工作,而你甚至不知道它。例如,创建反应应用程序 https://github.com/facebook/create-react-app#creating-an-app自动安装它,不需要你做任何事情 - 与 Babel 一样......
Babel
将您的所有代码转换为 ECMA5,以便大多数浏览器和这些浏览器的大多数版本都可以读取它。
同样,这可以通过 npm 安装,或者如果你只是想玩一下 React 并且不想被这样的细节所困扰,你可以运行 create-react-app,这将只适用于自动设置,并且将当你学习的时候,不要打扰你的生活。
他们让事情变得更容易
NPM、Webpack、Babel 和许多其他 Node 包只是为了让您的生活更轻松。构建网络应用程序需要大量维护 - 或者通常您甚至不需要考虑的小非编程烦恼。
尽量不要被新的软件包吓倒,因为运用它们的力量可能意味着无数的时间投入到更有趣的事情上。
结论
希望这篇文章能够帮助您了解 React、AJAX 和 Web 应用程序开发的持续性质之间的区别。 React 和 AJAX 没有可比性,但 React 使用 AJAX,或者更确切地说,您(开发人员)在 React 中使用 AJAX 来获取数据,而无需重新加载页面。
AJAX 和其他技术对于 Web 应用程序的进步具有里程碑意义,但由于它们对应用程序的绝对重要性,它们被大量吸收到新技术中,以至于您甚至不必了解它们即可获得它们的好处。
我的目的是纠正你们学习道路上的一些误解;解释网络开发当前状态的“原因”;并介绍你没有提到但应该了解的技术:Node、npm、Babel。
如果您想继续学习,我强烈建议您学习 React 教程。我已经做了一些平台.ui.dev/ https://platform.ui.dev/,并喜欢他们的学习方法和报酬结构(我没有得到报酬来这么说)。祝你好运,我希望这对你有帮助。