目次
SearchBar 组件
列表组件
结论
ホームページ CMS チュートリアル &#&プレス React と Axios: API 呼び出しの初心者ガイド

React と Axios: API 呼び出しの初心者ガイド

Aug 31, 2023 pm 10:45 PM

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 フックをインポートし、以下に示すように状態を作成します。

リーリー

ここでは、usersstore のステータスを確認できます。 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 として参照します (単数形と複数形の違いに注意してください)。さらに、配列内の各オブジェクトのキーと値のペアを使用して、nameid のキーと値のペアを使用して別のオブジェクトを作成します。

一般情况下,在浏览器中查看API调用结果,会看到里面有first last 键值对name 对象,但没有全名的键值对。因此,从上面的代码中,我们能够组合 first last 名称,在新的 JavaScript 对象中创建全名。请注意,JSON 和 JavaScript 对象是不同的东西,尽管它们的工作方式基本相同。

然后我们将新的中间数据设置为 setUserssetStore 状态。

6. 通过过滤填充数据存储

过滤的想法非常简单。我们有我们的 store 状态,它始终保持原始数据不变。然后,通过在该状态上使用 filter 函数,我们只获取匹配的元素,然后将它们分配给 users 状态。

const filteredData = store.filter((item) => (
    item.name.toLowerCase().includes(event.target.value.toLowerCase()))
ログイン後にコピー

filter 方法需要一个函数作为参数,该函数针对数组中的每个元素运行。这里我们将数组中的每个元素称为 item。然后,我们获取每个 itemname 键并将其转换为小写,以使我们的过滤功能不区分大小写。

获得 itemname 键后,我们检查该键是否包含我们输入的搜索字符串。 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 时有条件地渲染 SearchBarLists 组件,然后在加载状态为 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 对象中重构结果。

接下来是使用 filterincludes 方法创建过滤函数。最后,我们创建了两个不同的组件,并在尚未获取数据时有条件地以加载状态渲染我们的组件。

在过去的几年里,React 越来越受欢迎。事实上,我们在 Envato Market 中有许多项目可供购买、审查、实施等。如果您正在寻找有关 React 的其他资源,请随时查看它们。

以上がReact と Axios: API 呼び出しの初心者ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

WordPressは初心者にとって簡単ですか? WordPressは初心者にとって簡単ですか? Apr 03, 2025 am 12:02 AM

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

WordPressを3日で学ぶことはできますか? WordPressを3日で学ぶことはできますか? Apr 09, 2025 am 12:16 AM

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

ワードプレスは何に適していますか? ワードプレスは何に適していますか? Apr 07, 2025 am 12:06 AM

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

WixまたはWordPressを使用する必要がありますか? WixまたはWordPressを使用する必要がありますか? Apr 06, 2025 am 12:11 AM

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

WordPressの費用はいくらですか? WordPressの費用はいくらですか? Apr 05, 2025 am 12:13 AM

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

なぜWordPressを使用するのはなぜですか? なぜWordPressを使用するのはなぜですか? Apr 02, 2025 pm 02:57 PM

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

WordPressはCMSですか? WordPressはCMSですか? Apr 08, 2025 am 12:02 AM

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

WordPressはまだ無料ですか? WordPressはまだ無料ですか? Apr 04, 2025 am 12:06 AM

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

See all articles