React.js 和 Ajax 之间的区别

2024-05-22

当我在 google 上搜索 React.js 时,我得到的是:React.js 是一个用于创建用户界面的框架。如果网站的某个特定部分经常更新,则意味着我们可以使用 React。但我很困惑 Ajax 仅用于此目的。我们可以使用 Ajax 更新网站的一部分,而无需刷新页面。对于模板,我们将使用车把和胡须。有人可以向我解释一下 React 与 Ajax 有何不同以及我们为什么应该使用它。


简而言之,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 的工作方式就像网页一样:

  1. 用户执行操作(例如按向上箭头)
  2. 客户端(如 Firefox 等 Web 浏览器)从服务器(如 Stack Overflow (SO) 服务器)请求数据。
  3. 服务器处理请求(更新数据库以记录赞成票)。
  4. 服务器将响应发送回客户端,说明操作是否成功。
  5. 最后,一些已经加载到网页中的代码决定如何处理这些新信息(在我们的示例中,javascript 将向向上箭头添加一个类,CSS 规则将规定具有该类的元素为橙色)。
  6. 用户只能看到箭头是橙色的。所有其他步骤都是隐藏的,因此看起来像是一个无缝的响应式操作。

单页应用程序

由于我们不会在每次点击时重建整个页面,因此您可以将有关该网站的信息存储在浏览器中。这可以在您的整个访问和以后的访问中使用。

第一次访问 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 之前完成的。

节点之所以重要有两个重要原因:

  1. 它可以让你下载其他东西
  2. 它允许您在将 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/,并喜欢他们的学习方法和报酬结构(我没有得到报酬来这么说)。祝你好运,我希望这对你有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React.js 和 Ajax 之间的区别 的相关文章

  • 按 T​​ab 键可关闭从子菜单打开的 Material UI 对话框

    我需要创建一个菜单栏 其中包含许多带有子菜单的菜单 当我从顶级菜单项打开对话框时 一切都会按预期 预期进行 但是当我从子菜单打开对话框时 按 Tab 键会关闭该对话框 我尝试了几种不同的方法来实现嵌套菜单 并选择了此处讨论的方法 https
  • 使用 Apollo-Client 对 GitHub API v4 进行身份验证

    与之前的版本一样 GitHub 的新 GraphQL API 需要使用令牌进行身份验证 那么 我们如何添加一个 Header 信息到HttpLink里面Apollo Client const client new ApolloClient
  • 如何为 NextAuth.js 创建自定义 UI(使用 AWS Cognito)?

    是否可以为 AWS Cognito 提供自定义 UINextAuth js https next auth js org 当我使用 NextAuth js 调用 API 时 我看到这个 主观上丑陋的 屏幕 只有一个按钮可以将您重定向到真正的
  • react-hook-form:检查未保存的更改

    我有一个由以下人员控制的预填写表格react hook form https react hook form com const control handleSubmit formState setValue reset useForm
  • f:ajax 不工作

    我很难得到f ajax从事某项工作h panelGroup 这就是我正在做的 JSF 代码
  • 如何过滤 jQuery.ajax() 返回的数据?

    当使用jQuery ajax 方法中 我正在努力过滤返回的数据以获取我所需要的数据 我知道这很容易使用 load 可能还有其他 jQuery AJAX 方法 但我需要使用 ajax 具体来说 例如 我知道这是可行的 var title da
  • 如何在ListBox中加载大量数据? ASP.NET MVC 应用程序

    我正在使用 ASP NET MVC 应用程序 要求用户能够从可能包含超过 30 000 个条目的列表框中选择一个项目 是否有一种使用 Ajax 调用来填充此 ListBox 内容的动态方法 效果良好 我是否最好只填充服务器上的 ListBo
  • 将 Javascript 类数组传递给 MVC 控制器?

    我正在尝试将一系列服务传递给我的控制器 我尝试了很多不同的方法来让它工作 在进入控制器之前序列化数据 序列化每个服务 唯一有效的方法是将控制器参数更改为字符串并序列化数组 然后使用 JsonConvert 但我 d 宁愿不这样做 使用指定的
  • React Map 总是使用最后一个元素的数据调用方法

    我正在制作一个社交媒体应用程序 我正在循环浏览所有评论并将其显示在用户界面上 当我单击编辑时 最后一条评论的文本总是显示在输入中 我尝试了很多不同的方法 改变了结构 使用bind来绑定上下文 但没有任何帮助 我正在使用 React Mate
  • ReactTable 修复了最后一行

    我正在使用 ReactTable 最后我需要创建一些摘要 当分页存在时 它每次都应该可见 可以用react table来实现吗 我可以通过创建下一个表来部分解决这个问题 但我没有找到如何隐藏标题的方法 另一个问题是调整列宽度时 它不会应用于
  • 如何在phonegap应用程序中使用存储在localStorage中的json feed?

    这就是我正在做的 向我的网络服务器发出请求 响应采用 json 格式 使用 jquery 模板在我的应用程序中呈现回调数据 非常简单 就像魅力一样 问题是 我想在本地存储一些数据 这样我的应用程序就不必每次都从服务器获取它 3g 很慢 每笔
  • 如何在 jquery 中使 ajax 数据键动态化?

    我试图使内联编辑成为动态的 因此它只依赖于我的标记中的一些数据属性 所以现在的代码如下 inline edit editable function value settings var editableField this ajax typ
  • 为什么 JSON 结果可以是布尔值而不是对象或数组?

    From JSON 网站 http json org JSON 建立在两种结构之上 名称 值对的集合 在各种语言中 这被实现为对象 记录 结构 字典 哈希表 键控列表或关联数组 值的有序列表 在大多数语言中 这被实现为数组 向量 列表或序列
  • Wicket:并发 Ajax 请求仅限于一个?

    情况 在我的 Wicket 应用程序中 我有一个包含两个标签的页面 每次选择一个选项卡时 都会通过 Ajax 获取其内容 以便每次切换到不同的选项卡时 都会从服务器新鲜加载其内容 在其中一个选项卡上 我有一个输入字段 其中有一个 onblu
  • 渲染作为 Prop 传入的 Component

    我怎样才能渲染一个StyledComponent它是作为道具传入的吗 我正在传递一个Spinner组件到我的BarComponent作为渲染的道具 我尝试使用 this props icon in my BarComponent在下面的示例
  • WooCommerce 使用 AJAX 设置购物车数量?

    我已经为此绞尽脑汁好几天了 需要一些指导 我正在为 WooCommerce 网站完全从头开始制作自定义主题 现在我正在尝试让购物车功能正常工作 我一直试图使用按钮 来更新购物车中产品的数量 对我来说问题似乎是WC 我在functions p
  • 使用 nginx 在云上部署 django 和 React

    我有一个 digitalocean 服务器 并且已经使用 Gunicorn 和 nginx 部署了 Django 后端服务器 如何在同一台服务器上部署 React 应用程序 您可以构建 React 应用程序并使用 Nginx 提供其静态文件
  • 纱线安装错误:无法下载Chromium

    Yarn 安装无法下载 Chromium 错误如下 D workspace www ant design mobile pro yarn yarn install v1 12 3 Directory D workspace www ant
  • 从回调中访问状态

    我在从回调访问组件状态时遇到问题 国家的价值num更改正确 但此类更改对于加载时定义的回调函数不可见 import React useState from react class MyObject callback gt void cons
  • React 键“mods”的切片缩减器在初始化期间返回未定义。 (还原)

    减速器 index js import combineReducers from redux import mods from mods js export default combineReducers lt error comes fr

随机推荐