react调用api等待返回结果_【React】552 React 中必会的 10 个概念

5c6c7be2413aeae191745426c54986bf.png

前端时空

前端网红集结号,传递一线全栈技术,带你穿越前端时空。 前端时空-前端老王翻译整理

都 2020 年了,再不掌握 ES6,说不定就被优化了。

目录

  1. 箭头函数
  2. 默认参数
  3. 模板字符串
  4. let 和 const
  5. 解构
  6. 三元运算符
  7. 导入/导出模块
  8. async / await
  9. 展开运算符 / 不定参数

箭头函数

您可能知道,定义React组件的最简单方法是编写 JavaScript 函数,如以下示例所示。

e14cdcfd905821d642d0f5677f7c0159.png

但是还有另一种更加简洁的方法来创建 React 函数组件。

79e73d3da578f012912c1b7d2aee10cc.png

「箭头函数」是您在 JavaScript 和 React 应用程序中最多见的函数。

在深入探讨如何在 React 中使用它们之前,让我们看看如何使用箭头函数。有多种方式可用于编写箭头函数。我们将在这里介绍一些常见的内容,以帮助您入门。

e25d03250d61c7628e5cd70cc9025625.png

介绍了基本语法,让我们了解如何将箭头函数与 React 一起使用。除了如上所述定义 React 组件之外,箭头函数在操作数组以及使用异步回调和 Promise 时也非常有用。

在 React 中,我们通常必须从服务器获取数据并将其显示给我们的用户。为了检索此数据,我们经常使用 Promise 链式调用。

fdf82945937f8fa31562bb9f212a2b24.png

Promise 链式调用得到简化,易于阅读,并且使用箭头函数更加简洁:

04abe855e29dabd47ac8034e000d72fd.png

最后,一旦检索到数据,就需要显示它。为了在 React 中渲染数据列表,我们必须在JSX内部循环。通常使用map / reduce / filter数组方法来实现。

56135a8c0491ac6fe36372a324e6b138.png

现在,让我们看看如何使用 ES6 箭头函数实现相同的函数。

0abe17d0af35e2aebad8918c885ca828.png

默认参数

既然我们已经了解了箭头函数,那么让我们来谈谈默认参数。ES6+ 的这一功能使它能够使用默认值初始化函数,即使函数调用不包含相应的参数也是如此。

但是首先,您还记得我们在 ES6 之前使用过的方法来检查函数中未声明的参数吗?您可能已经看过或使用过以下内容:

f68613745c3ea665ba56d7b500d02a72.png

为了防止函数崩溃或计算无效 / 错误结果,我们必须编写额外的代码来测试每个可选参数和分配的默认值。确实,此技术用于避免我们的函数内部发生不良影响。没有它,任何未初始化的参数将默认为值 undefined。

因此,这是我们在ES6之前如何处理默认参数的简短摘要。在 ES6 中定义默认参数要容易得多。

6cac51e54efa4f4ea7525933f2115891.png

如果将 offset,limit 和 orderBy 传递给函数调用,则它们的值将覆盖函数定义中定义为默认参数的值。无需额外的代码。

⚠️请注意,这 null 被视为有效值。这意味着,如果 null 为其中一个参数传递值,则不会采用该函数定义的默认值。因此,请确保使用 undefined而不是 null 当您希望使用默认值时使用。

现在,您知道如何在 ES6 中使用默认参数。那么默认参数和 React 呢?

在 React 中,您可以使用 defaultProps 属性为组件属性设置默认值。但是,这仅适用于类组件。实际上,React 团队正在弃用 defaultProps 功能组件上的属性,并且将其删除。

别担心!我们可以利用默认参数为 React 函数组件的 prop 设置默认值。请查看以下示例。

e1aa0a941308faaeb92507aaae60d2c4.png

模板字符串

模板字符串是允许嵌入 JavaScript 表达式的字符串。换句话说,就是在字符串中输出变量 / 表达式的一种方式。

在ES5中,我们必须使用 + 运算符将多个值连接起来以连接字符串。

96579ffdb4303eebcd485364f931279e.png

在 ES6 中,模板字符串由反引号引起来。要在这些模板中插入表达式,我们可以使用${表达式}

7c8b612a211d6e8eed9ab4e2e193cf4e.png

模板字符串使这种替换更具可读性。在 React 中使用它们将帮助您动态设置组件属性值或元素属性值。

963f10273f05650f75402880aadd62a7.png

let 和 const

在 ES5 中,声明变量的唯一方法是使用 var 关键字。ES6 引入了两种使用 const 和 let。

主要区别:

var 函数作用域 

在声明变量之前访问变量时 undefined

let 块作用域 

在声明之前访问变量时 ReferenceError

const 块作用域 

在声明之前访问变量时,ReferenceError 

无法重新分配 

声明时应初始化

在 React 应用程序中,const 用于声明 React 组件。最佳实践是默认使用 const,只在确实需要改变变量的值时使用 let。

9002063f74cf7e2efd51c6563d8598b9.png

ES6 引入了 JavaScript 类。如 MDN 网站文档所述,类主要是语法糖,而不是 JavaScript 现有的基于原型的继承。有些属性值得一提,因为它们与使用常规函数编写的类不太相同。

2ecae700fe883d8cb8030d84e906cf46.png

继承,这不是特定于 JavaScript 的东西,而是面向对象编程中的常见概念。

简而言之,这是将一个类创建为另一个类的子级的能力。子类将从其父类的属性继承(实际上,这比您所使用的 OOP 语言要复杂得多)。

在 ES6 中,extends 关键字继承另一个的类。

d23bd6c5caba5fe8fc70683a897f176a.png

在 React 应用程序中,您还可以使用 ES6 类来定义组件。要定义一个 React 组件类,您需要扩展 React.Component 基类,如下所示:

7afa82b5e99902caddb90b8daba8205c.png

通过创建这样的组件,您将可以访问与 React 组件相关的一堆方法和属性(状态,属性,生命周期方法等)。请查看 React 文档以获取 React.Component 类的详细 API 参考。

解构

在 React 中非常经常使用解构。这是一个可以与对象以及数组一起使用的概念。分解是简化 JavaScript 代码的一种简便方法,因为它使我们可以在一行中将数据从对象或数组中拉出。

数组解构与对象解构相似,不同之处在于我们按照数据在数组中出现的顺序将数据一一拉出。

让我们直接来看看它在 React 应用程序中的用法。

dc2fed87959fb3d295b24606de115ef9.png

三元运算符

三元运算符用作 if 语句的简洁方式。典型 if 语句的语法如下:

9338aeaedf1dee6502fb586d5a3345ea.png

条件为真,执行第一条语句(在冒号之前:)。条件为假(false,null,NaN,0,""或未定义),执行第二条语句(在冒号之后:)。

虽然有时候代码会很简洁,但是可读性会降低,所以请谨慎使用。

07076ea76f941966eabc6566f1fc2ba2.png

在 React 中,三元运算符使我们可以在 JSX 中编写更简洁的条件语句。通常使用它来根据条件决定显示或隐藏哪个组件。

31dda733daea750b6e5505eef7bcf388.png

导入 / 导出模块

在 ES6 之前,由于 JavaScript 不支持模块,我们使用了 RequiredJS 或 CommonJS 之类的库来导入 / 导出模块。您可能之前已经看过,特别是如果您已经使用过 Node.js。

6daa4d2b39dc13ddbc875b5f8e7ab91f.png

在 ES6 中,我们可以直接使用 exportand import 语句来处理应用程序中的模块。

f66696f3d540e760d5a77d3c046eb136.png

这在 React 中非常有用,因为我们正在将应用程序 UI 划分为组件层次结构。组件在自己的文件中定义,其他组件则需要导入或者导出,例如以下示例:

764566c7cdd76a10b81194cd8aec628a.png

async / await

您可能熟悉异步编程的概念。在 JavaScript 中,它们是使用异步代码的许多方法(回调,Promise,诸如 bluebird 和 deferred.js 等外部库)。在这里,我们只是简单的提及 async / await。

async / await 是一种特殊的语法,可以以更舒适的方式处理 Promise。

如果您需要了解 Promise,请查看 MDN 中的详细讲解。

您可能已经注意到,有两个新关键字:async 和 await。

让我们首先从 async 关键字开始。异步用于定义异步函数,该函数返回隐式 Promise 作为其结果。

5a4af57c91ff805bf384ee9412988642.png

请注意,使用异步函数的代码的语法和结构看起来像常规同步函数。

关键字 await仅在异步函数中起作用。它使程序等待,直到 Promise 成功并返回其结果。这是一个 Promise 在几秒钟后 resolve 的示例:

50ea6915dc540ac88b0aaa9125a5ed7e.png

与使用相比 Promise.then(),这是获得 Promise resolve 的一种更为优雅的方法,此外,它更易于读写。

⚠️请小心,因为 await 不能在常规函数中使用。如果这样做,则会出现语法错误。

值得一提的是 async / await 是如何处理错误。实际上,如果一个 Promise 能够正常 resolve,它就会返回结果。但是,如果 reject,则会引发错误。您可以使用 Promise catch 方法或 try..catch 与常规抛出相同的方式来处理错误。

e3fbfce32d41bcd8dc0e934545292ff9.png

我将 async / await 包含在此列表中是因为在每个前端项目中,我们正在做很多需要异步代码的工作。一个常见的例子是当我们想通过 API 调用获取数据时。

在 React 中,这就是我们可以使用 promises + async / await 做到的。

c2b5be3aff5eef68a6b1413daf4f826a.png

展开运算符 / 不定参数

展开运算符和不定参数由三个点表示...。在展开运算符的情况下,它将可迭代扩展为单个元素。对于不定参数,它将其余参数列表收集到一个数组中。

让我们看一些示例,以了解它们如何工作以及如何使用它们。

9a8c29f905a2bf7e30b5b46df01b5420.png

展开运算符在 Redux 之类的库中得到了广泛使用,以不变的方式处理应用程序状态。但是,这也常与 React 一起使用,以轻松传递所有对象的数据作为单独的属性。这比逐个传递每个属性要容易。

如果您以前听说过 HOC(高阶组件),则知道您需要将所有属性传递给封装的组件。展开运算符能够为此提供帮助。

2056e8bb845c5d00a715b739ac256c27.png

END

了解更多 点击下方图片即可阅读 ec0fe8d19759b35e6b8a6b2f5fc90efa.png 200行JS代码,带你实现代码编译器(人人都能学会) 33dc51e7b8a487141e98fa7794ccbfc3.png JS自定义事件如此简单! 96f9b4dfdc0caef08823e260445912aa.png Webpack插件开发如此简单!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值