React の useFetch フック

ReactReactBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、React の useFetch フックについて学びます。このフックを使うことで、fetch() メソッドを宣言的に実装でき、API からデータを取得してコンポーネントの状態を更新するのが簡単になります。URL とオプションを受け取り、fetch() を非同期で呼び出してレスポンス、エラー、および中止状態変数を更新するカスタムフックを作成します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) react(("React")) -.-> react/StateManagementGroup(["State Management"]) react/FundamentalsGroup -.-> react/jsx("JSX") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StateManagementGroup -.-> react/use_state_reducer("Using useState and useReducer") subgraph Lab Skills react/jsx -.-> lab-38384{{"React の useFetch フック"}} react/hooks -.-> lab-38384{{"React の useFetch フック"}} react/use_state_reducer -.-> lab-38384{{"React の useFetch フック"}} end

React useFetch フック

VM には既に index.htmlscript.js が用意されています。一般的には、script.jsstyle.css にのみコードを追加すればよいです。

以下がコードです。

const useFetch = (url, options) => {
  const [response, setResponse] = React.useState(null);
  const [error, setError] = React.useState(null);
  const [abort, setAbort] = React.useState(() => {});

  React.useEffect(() => {
    const abortController = new AbortController();
    const signal = abortController.signal;

    const fetchData = async () => {
      try {
        const res = await fetch(url, { ...options, signal });
        const json = await res.json();
        setResponse(json);
      } catch (error) {
        setError(error);
      }
    };
    fetchData();

    return () => {
      abort();
    };
  }, []);

  return { response, error, abort };
};

const ImageFetch = (props) => {
  const res = useFetch("https://dog.ceo/api/breeds/image/random", {});

  if (!res.response) {
    return <div>Loading...</div>;
  }

  const imageUrl = res.response.message;

  return (
    <div>
      <img src={imageUrl} alt="avatar" width={400} height="auto" />
    </div>
  );
};

ReactDOM.createRoot(document.getElementById("root")).render(<ImageFetch />);

解説:

  • このコードの目的は、React フックを使って宣言的に fetch() 呼び出しを実装することです。
  • useFetch フックは 2 つのパラメータを取ります。urloptions オブジェクトです。
  • このフックは useState() フックを使って 3 つの状態変数を初期化します。responseerror、および abort です。
  • useEffect() フックは非同期で fetch() を呼び出し、それに応じて状態変数を更新するために使われます。
  • AbortController は要求を中止するために使われ、コンポーネントがアンマウントされたときに要求をキャンセルするために使われます。
  • このフックは responseerror、および abort の状態変数を含むオブジェクトを返します。
  • ImageFetch コンポーネントは useFetch フックを使ってランダムな犬の画像を取得し、<img> 要素に表示します。

右下隅の「Go Live」をクリックして 8080 ポートでウェブサービスを実行してください。その後、Web 8080 タブを更新してウェブページをプレビューできます。

まとめ

おめでとうございます!あなたは React useFetch フックの実験を完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を行って練習してください。