React 和 Axios:API 调用初学者指南
本教程将教您如何使用 Axios 获取数据,然后如何操作它并最终通过过滤功能将其显示在您的页面上。您将在此过程中学习如何使用映射、过滤器和包含方法。最重要的是,您将创建一个简单的加载器来处理从 API 端点获取的数据的加载状态。
1. 设置项目
让我们在终端中使用 create-react-app
命令设置一个 React 项目:
npx create-react-app project-name
然后,通过终端窗口打开项目目录,输入 npm install axios
在本地为项目安装 Axios。
2.选择目标API
我们将使用随机用户生成器 API 来获取随机用户信息以在我们的应用程序中使用。
让我们将 Axios 模块添加到我们的应用程序中,方法是将其导入到我们的 App.js
文件中。
import axios from 'axios'
随机用户生成器 API 提供了一系列用于创建各种类型数据的选项。您可以查看文档以获取更多信息,但对于本教程,我们将保持简单。
我们想要获取十个不同的用户,我们只需要名字、姓氏和唯一的 ID,这是 React 创建元素列表时所需要的。另外,为了使调用更加具体,我们以国籍选项为例。
下面是我们将调用的 API URL:
https://randomuser.me/api/?results=10&inc=name,registered&nat=fr
请注意,我没有使用 API 中提供的 id
选项,因为它有时会为某些用户返回 null
。因此,为了确保每个用户都有一个唯一的值,我在 API 中包含了 registered
选项。
您可以将其复制并粘贴到浏览器中,您将看到返回的 JSON 格式的数据。
现在,接下来就是通过 Axios 进行 API 调用。
3. 创建应用程序状态
首先,让我们使用 React 中的 useState
挂钩创建状态,以便我们可以存储获取的数据。
在我们的 App
组件中,从 React 导入 App
组件中,从 React 导入 useState
钩子,然后创建如下所示的状态。
import React, { useState } from "react"; import axios from "axios"; const App = () => { const [users, setUsers] = useState([]); const [store, setStore] = useState([]); return ( <div> </div> ); }; export default App;
在这里你可以看到 users
和 store
状态。一个将用于过滤目的,不会被编辑,另一个将保存将在 DOM 中显示的过滤结果。
4.使用axios获取数据
接下来我们需要做的是创建一个 getUsers
函数来处理数据的获取。在此函数中,我们使用 axios
使用 get
方法从 API 获取数据。
现在,为了在页面加载时显示我们获取的数据,我们将导入一个名为 useEffect
的 React hook,并在其中调用 getUsers
函数。
useEffect
钩子基本上管理功能组件中的副作用,它类似于 React 基于类的组件中使用的 componentDidMount()
生命周期钩子。该钩子接受一个空数组作为第二个参数,以进行副作用清理。
更新 App
组件中的代码,如下所示,以便我们可以在控制台中检查响应数据。
import React, { useState, useEffect } from "react"; const App = () => { const [users, setUsers] = useState([]); const [store, setStore] = useState([]); const getUsers = () => { axios.get("https://randomuser.me/api/?results=10&inc=name,registered&nat=fr") .then(response => console.log(response)) }; useEffect(() => { getUsers(); }, []); return ( <div> </div> ); }; export default App;
当您检查控制台时,您将看到一个对象输出。如果你打开这个对象,里面有另一个对象,名为 data
,而在 data 里面,有一个名为 results
的数组。
如果我们想从结果中返回特定值,我们可以更新 axios.get
调用,如下所示:
axios.get("https://randomuser.me/api/?results=10&inc=name,registered&nat=fr") .then(response => console.log(response.data.results[0].name.first))
这里我们记录了结果数组中第一个值的名称。
5.处理结果数据
现在让我们使用 JavaScript 内置的 map
方法来迭代数组中的每个元素,并创建一个具有新结构的新 JavaScript 对象数组。
使用以下代码更新您的 getUsers
函数:
const getUsers = () => { axios .get("https://randomuser.me/api/?results=10&inc=name,registered&nat=fr") .then((response) => { const newData = response.data.results.map((result) => ({ name: `${result.name.first} ${result.name.last}`, id: result.registered })); setUsers(newData); setStore(newData); }) .catch((error) => { console.log(error); }); };
在上面的代码中,我们创建了一个名为 newData
的变量。它存储使用 newData
的变量。它存储使用 map
方法查看 response.data.results
数组的结果。在 map
回调中,我们将数组的每个元素引用为 result
(注意单数/复数差异)。此外,通过使用数组中每个对象的键值对,我们使用 name
和 id
方法查看 response.data.results
数组的结果。在 map
回调中,我们将数组的每个元素引用为 result
(注意单数/复数差异)。此外,通过使用数组中每个对象的键值对,我们使用 name
和 id
键值对创建了另一个对象。
一般情况下,在浏览器中查看API调用结果,会看到里面有first
和last
键值对name
对象,但没有全名的键值对。因此,从上面的代码中,我们能够组合 first
和 last
名称,在新的 JavaScript 对象中创建全名。请注意,JSON 和 JavaScript 对象是不同的东西,尽管它们的工作方式基本相同。
然后我们将新的中间数据设置为 setUsers
和 setStore
状态。
6. 通过过滤填充数据存储
过滤的想法非常简单。我们有我们的 store
状态,它始终保持原始数据不变。然后,通过在该状态上使用 filter
函数,我们只获取匹配的元素,然后将它们分配给 users
状态。
const filteredData = store.filter((item) => ( item.name.toLowerCase().includes(event.target.value.toLowerCase()))
filter
方法需要一个函数作为参数,该函数针对数组中的每个元素运行。这里我们将数组中的每个元素称为 item
。然后,我们获取每个 item
的 name
键并将其转换为小写,以使我们的过滤功能不区分大小写。
获得 item
的 name
键后,我们检查该键是否包含我们输入的搜索字符串。 includes
是另一个内置 JavaScript 方法。我们将在输入字段中键入的搜索字符串作为参数传递给 includes
,如果该字符串包含在调用它的变量中,则它会返回。同样,我们将输入字符串转换为小写,这样无论您输入大写还是小写输入都无关紧要。
最后,filter
方法返回匹配的元素。因此,我们只需将这些元素存储在 setUsers
状态中即可。
使用我们创建的函数的最终版本更新 App
组件。
const filterNames = (event) => { const filteredData = store.filter((item) => item.name.toLowerCase().includes(event.target.value.toLowerCase()) ); setUsers(filteredData); };
7. 创建组件
尽管对于这个小示例,我们可以将所有内容放入 App
组件中,但让我们利用 React 并制作一些小型功能组件。
让我们向应用程序添加几个组件。首先,我们从单独的 JavaScript 文件导入组件(我们将很快定义这些文件):
import Lists from "./components/Lists"; import SearchBar from "./components/SearchBar";
接下来,我们更新应用程序组件的 return
语句以使用这些组件:
return ( <div className="Card"> <div className="header">NAME LIST</div> <SearchBar searchFunction={filterNames} /> <Lists usernames={users} /> </div> );
目前,我们将只关注功能。稍后我将提供我创建的 CSS 文件。
请注意,我们有 searchFunction
属性用于 SearchBar
组件,以及 usernames
属性用于 Lists
组件.
另请注意,我们使用 users
状态而不是 store
状态来显示数据,因为 users
状态包含已过滤的数据结果。
SearchBar
组件
这个组件非常简单。它仅将 filterNames
函数作为 prop,并在输入字段更改时调用该函数。将以下代码放入 components/SearchBar.js 中:
import React from 'react'; const SearchBar = ({ searchFunction}) => { return ( <div> <input className="searchBar" type='search' onChange={searchFunction} /> </div> ) }; export default SearchBar;
列表组件
该组件将简单地列出用户的姓名。这位于 components/List.js 中:
import React from 'react'; const Lists = ({ usernames }) => { return ( <div> <ul> {usernames.map(username => ( <li key={username.id}>{username.name}</li> ))} </ul> </div> ) }; export default Lists;
在这里,我们再次使用 map
方法来获取数组中的每个项目,并从中创建一个 <li>
项目。请注意,当您使用 map
创建项目列表时,您需要使用 key
以便 React 跟踪每个列表项目。
8.跟踪加载状态
让我们使用 useState
挂钩创建一个加载状态,以显示何时尚未获取数据。
const [loading, setLoading] = useState(false);
接下来,我们将更新数据获取方法中的加载状态。
const getUsers = () => { axios.get("https://randomuser.me/api/?results=10&inc=name,registered&nat=fr") .then((response) => { const newData = response.data.results.map((result) => ({ name: `${result.name.first} ${result.name.first}`, id: result.registered, })); setLoading(true); setUsers(newData); setStore(newData); }) .catch((error) => { console.log(error); }); };
在这里,我们创建了一个 loading
状态并将其初始设置为 false。然后我们在使用 setLoading
状态获取数据时将此状态设置为 true。
最后,我们将更新 return 语句以呈现加载状态。
return ( <> {loading ? ( <div className="Card"> <div className="header">NAME LIST</div> <SearchBar searchFunction={filterNames} /> <Lists users={users} /> </div> ) : ( <div className="loader"></div> )} </> );
使用 JavaScript 三元运算符,我们在加载状态为 false 时有条件地渲染 SearchBar
和 Lists
组件,然后在加载状态为 true 时渲染加载程序。另外,我们创建了一个简单的加载器来在界面中显示加载状态。
9. 添加一些 CSS 进行样式设置
您可以在下面找到特定于此示例的 CSS 文件。
body, html { -webkit-font-smoothing: antialiased; margin: 0; padding: 0; font-family: "Raleway", sans-serif; -webkit-text-size-adjust: 100%; } body { display: flex; justify-content: center; font-size: 1rem/16; margin-top: 50px; } li, ul { list-style: none; margin: 0; padding: 0; } ul { margin-top: 10px; } li { font-size: 0.8rem; margin-bottom: 8px; text-align: center; color: #959595; } li:last-of-type { margin-bottom: 50px; } .Card { font-size: 1.5rem; font-weight: bold; display: flex; flex-direction: column; align-items: center; width: 200px; border-radius: 10px; background-color: white; box-shadow: 0 5px 3px 0 #ebebeb; } .header { position: relative; font-size: 20px; margin: 12px 0; color: #575757; } .header::after { content: ""; position: absolute; left: -50%; bottom: -10px; width: 200%; height: 1px; background-color: #f1f1f1; } .searchBar { text-align: center; margin: 5px 0; border: 1px solid #c4c4c4; height: 20px; color: #575757; border-radius: 3px; } .searchBar:focus { outline-width: 0; } .searchBar::placeholder { color: #dadada; } .loader { border: 15px solid #ccc; border-top: 15px solid #add8e6; border-bottom: 15px solid #add8e6; border-radius: 50%; width: 80px; height: 80px; animation: rotate 2s linear infinite; } @keyframes rotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
结论
在本教程中,我们使用随机用户生成器 API 作为随机数据源。然后,我们从 API 端点获取数据,并使用 map
方法在新的 JavaScript 对象中重构结果。
接下来是使用 filter
和 includes
方法创建过滤函数。最后,我们创建了两个不同的组件,并在尚未获取数据时有条件地以加载状态渲染我们的组件。
在过去的几年里,React 越来越受欢迎。事实上,我们在 Envato Market 中有许多项目可供购买、审查、实施等。如果您正在寻找有关 React 的其他资源,请随时查看它们。
以上是React 和 Axios:API 调用初学者指南的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

有四种方法可以调整 WordPress 文章列表:使用主题选项、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代码(在 functions.php 文件中添加设置)或直接修改 WordPress 数据库。

最近,我们向您展示了如何通过允许用户将自己喜欢的帖子保存在个性化库中来为用户创建个性化体验。您可以通过在某些地方(即欢迎屏幕)使用他们的名字,将个性化结果提升到另一个水平。幸运的是,WordPress使获取登录用户的信息变得非常容易。在本文中,我们将向您展示如何检索与当前登录用户相关的信息。我们将利用get_currentuserinfo(); 功能。这可以在主题中的任何地方使用(页眉、页脚、侧边栏、页面模板等)。为了使其工作,用户必须登录。因此我们需要使用

博客是人们在网上表达观点、意见和见解的理想平台。许多新手渴望建立自己的网站,却因担心技术障碍或成本问题而犹豫不决。然而,随着平台不断发展以满足初学者的能力和需求,现在开始变得比以往任何时候都更容易。 本文将逐步指导您如何建立一个WordPress博客,从主题选择到使用插件提升安全性和性能,助您轻松创建自己的网站。 选择博客主题和方向 在购买域名或注册主机之前,最好先确定您计划涵盖的主题。个人网站可以围绕旅行、烹饪、产品评论、音乐或任何激发您兴趣的爱好展开。专注于您真正感兴趣的领域可以鼓励持续写作

您想了解如何在父分类存档页面上显示子分类吗?在自定义分类存档页面时,您可能需要执行此操作,以使其对访问者更有用。在本文中,我们将向您展示如何在父分类存档页面上轻松显示子分类。为什么在父分类存档页面上显示子分类?通过在父分类存档页面上显示所有子分类,您可以使其不那么通用,对访问者更有用。例如,如果您运行一个关于书籍的WordPress博客,并且有一个名为“主题”的分类法,那么您可以添加“小说”、“非小说”等子分类法,以便您的读者可以

过去,我们分享过如何使用PostExpirator插件使WordPress中的帖子过期。好吧,在创建活动列表网站时,我们发现这个插件非常有用。我们可以轻松删除过期的活动列表。其次,多亏了这个插件,按帖子过期日期对帖子进行排序也非常容易。在本文中,我们将向您展示如何在WordPress中按帖子过期日期对帖子进行排序。更新了代码以反映插件中更改自定义字段名称的更改。感谢Tajim在评论中让我们知道。在我们的特定项目中,我们将事件作为自定义帖子类型。现在

要使用 WordPress 主机建站,需要:选择一个可靠的主机提供商。购买一个域名。设置 WordPress 主机帐户。选择一个主题。添加页面和文章。安装插件。自定义您的网站。发布您的网站。

您是否正在寻找自动化 WordPress 网站和社交媒体帐户的方法? 通过自动化,您将能够在 Facebook、Twitter、LinkedIn、Instagram 等平台上自动分享您的 WordPress 博客文章或更新。 在本文中,我们将向您展示如何使用 IFTTT、Zapier 和 Uncanny Automator 轻松实现 WordPress 和社交媒体的自动化。 为什么要自动化 WordPress 和社交媒体? 自动化您的WordPre

我们的一位用户询问其他网站如何在页脚中显示查询数量和页面加载时间。您经常会在网站的页脚中看到这一点,它可能会显示类似以下内容:“1.248秒内64个查询”。在本文中,我们将向您展示如何在WordPress中显示查询数量和页面加载时间。只需将以下代码粘贴到主题文件中您喜欢的任何位置(例如footer.php)。queriesin
