React と Axios: API 呼び出しの初心者ガイド
このチュートリアルでは、Axios を使用してデータを取得する方法、次にそれを操作する方法、そして最終的にフィルタリングを通じてページに表示する方法を説明します。その過程で、マッピング、フィルター、および include メソッドの使用方法を学習します。最も重要なのは、API エンドポイントから取得したデータの読み込みステータスを処理する単純なローダーを作成することです。
1. プロジェクトのセットアップ
ターミナルで create-react-app
コマンドを使用して React プロジェクトをセットアップしましょう:
次に、ターミナル ウィンドウでプロジェクト ディレクトリを開き、npm install axios
と入力して、プロジェクトの Axios をローカルにインストールします。
2.ターゲット API の選択
Random User Generator API を使用して、アプリケーションで使用するランダムなユーザー情報を取得します。
Axios モジュールを App.js
ファイルにインポートして、アプリケーションに追加しましょう。
ランダム ユーザー ジェネレーター API は、さまざまなタイプのデータを作成するための幅広いオプションを提供します。詳細についてはドキュメントを参照してください。ただし、このチュートリアルでは簡単に説明します。
10 人の異なるユーザーを取得したいと考えています。必要なのは、姓、名、および一意の 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 から useState
フックをインポートし、以下に示すように状態を作成します。
ここでは、users
と store
のステータスを確認できます。 1 つはフィルタリングの目的で使用され、編集されません。もう 1 つは、DOM に表示されるフィルタリングされた結果を保持します。
4.axios を使用してデータを取得する
次に行う必要があるのは、データの取得を処理する getUsers
関数を作成することです。この関数では、axios
を使用して、get
メソッドを使用して API からデータを取得します。
ここで、ページの読み込み時に取得したデータを表示するために、useEffect
という名前の React フックをインポートし、その中で getUsers
関数を呼び出します。
useEffect
フックは基本的に機能コンポーネントの副作用を管理し、React クラスベースのコンポーネントで使用される componentDidMount()
ライフサイクル フックに似ています。このフックは、副作用をクリーンアップするための 2 番目の引数として空の配列を受け入れます。
App
コンポーネントのコードを以下に示すように更新して、コンソールで応答データを検査できるようにします。
コンソールを確認すると、オブジェクトの出力が表示されます。このオブジェクトを開くと、内部に data
という名前の別のオブジェクトがあり、データの内部に results
という名前の配列があります。
結果から特定の値を返したい場合は、axios.get
呼び出しを次のように更新できます。
ここでは、結果配列の最初の値の名前を記録します。
5.処理結果データ
次に、JavaScript の組み込み map
メソッドを使用して、配列内の各要素を反復処理し、新しい構造を持つ JavaScript オブジェクトの新しい配列を作成しましょう。
次のコードで getUsers
関数を更新します:
上記のコードでは、newData
という名前の変数を作成しました。 map
メソッドを使用して 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 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









WordPressは、初心者が簡単に始めることができます。 1.バックグラウンドにログインした後、ユーザーインターフェイスは直感的であり、シンプルなダッシュボードは必要なすべての関数リンクを提供します。 2。基本操作には、コンテンツの作成と編集が含まれます。 WysiWygエディターは、コンテンツの作成を簡素化します。 3.初心者は、プラグインとテーマを介してウェブサイトの機能を拡張でき、学習曲線は存在しますが、練習を通じて習得できます。

3日以内にWordPressを学ぶことができます。 1.テーマ、プラグインなどのマスター基本知識。2。インストールや作業原則などのコア関数を理解します。 3.例を使用して、基本的および高度な使用法を学びます。 4.デバッグテクニックとパフォーマンスの最適化の提案を理解します。

wordpressisisgoodforvirtalayanywebprojectoitsversitilityasacms.itexcelsin:1)ユーザーフレンドリー、柔軟性と柔軟性と顧客化の維持、およびプルージンの数値化; 3)seooptimization;

WIXは、プログラミングの経験がないユーザーに適しており、WordPressは、よりコントロールと拡張機能を必要とするユーザーに適しています。 1)WIXはドラッグアンドドロップエディターとリッチテンプレートを提供しているため、Webサイトをすばやく構築できます。 2)オープンソースのCMSとして、WordPressには巨大なコミュニティとプラグインエコシステムがあり、詳細なカスタマイズと拡張をサポートしています。

WordPress自体は無料ですが、使用するには余分な費用がかかります。1。WordPress.comは、無料から支払いまでの範囲のパッケージを提供し、価格は月あたり数ドルから数十ドルまでの範囲です。 2。WordPress.orgでは、ドメイン名(年間10〜20米ドル)とホスティングサービス(月額5〜50米ドル)を購入する必要があります。 3.ほとんどのプラグインとテーマは無料で、有料価格は数十から数百ドルです。適切なホスティングサービスを選択し、プラグインとテーマを合理的に使用し、定期的に維持および最適化することにより、WordPressのコストを効果的に制御および最適化できます。

人々は、その力と柔軟性のためにWordPressを使用することを選択します。 1)WordPressは、さまざまなWebサイトのニーズに適した、使いやすさとスケーラビリティを備えたオープンソースのCMSです。 2)豊富なテーマとプラグイン、巨大なエコシステム、強力なコミュニティサポートがあります。 3)WordPressの作業原則は、テーマ、プラグイン、コア関数に基づいており、PHPとMySQLを使用してデータを処理し、パフォーマンスの最適化をサポートします。

WordPressはコンテンツ管理システム(CMS)です。コンテンツ管理、ユーザー管理、テーマ、プラグイン機能を提供して、Webサイトコンテンツの作成と管理をサポートします。その実用的な原則には、ブログから企業Webサイトまで、さまざまなニーズに適したデータベース管理、テンプレートシステム、プラグインアーキテクチャが含まれます。

WordPressのコアバージョンは無料ですが、使用中に他の料金が発生する場合があります。 1。ドメイン名とホスティングサービスには支払いが必要です。 2。高度なテーマとプラグインが充電される場合があります。 3.プロフェッショナルサービスと高度な機能が請求される場合があります。
