Master Course

本ページはお試し版です。コース全編をご希望の方はこちらからどうぞ。

SECTION 2: TypeScriptでReactアプリを開発しよう その1

  • 1このセクションで学ぶこと
  • 2バックエンドの準備
  • 3開発ツールのインストール
  • 4ReactコンポーネントをTypeScriptで書く
  • 5アプリの構成を確認する
  • 6イベントとfunctionに型をつける その1
  • 7イベントとfunctionに型をつける その2
  • 8複雑な構造のデータに型をつける
  • 9フォームの入力文字を消す
  • 10画像とCSSを追加する
  • 11ローディングを追加する
  • 12childrenに型をつける
  • 13action属性の利用(Reactバージョン19)
  • 14useActionStateの導入(Reactバージョン19)

Section 2: TypeScriptでReactアプリを開発しよう その1

  • 1このセクションで学ぶこと
  • 2バックエンドの準備
  • 3開発ツールのインストール
  • 4ReactコンポーネントをTypeScriptで書く
  • 5アプリの構成を確認する
  • 6イベントとfunctionに型をつける その1
  • 7イベントとfunctionに型をつける その2
  • 8複雑な構造のデータに型をつける
  • 9フォームの入力文字を消す
  • 10画像とCSSを追加する
  • 11ローディングを追加する
  • 12childrenに型をつける
  • 13action属性の利用(Reactバージョン19)
  • 14useActionStateの導入(Reactバージョン19)

ローディングを追加する

動画のテキスト【ローディングを追加する

レシピデータの取得中にはローディングを表示するようにします。componentsフォルダにLoading.tsxを作ってください。

loading-1.jpg

次のコードを書いてください。ここではアローfunctionの省略記法を使っています。

// Loading.tsx const Loading = () => <div className="loading"></div> export default Loading

App.tsxに次のコードを追加します。

// App.tsx import { useState } from "react" import Header from "./components/Header" import Form from "./components/Form" import Recipe from "./components/Recipe" import Loading from "./components/Loading" // 追加 import "./App.css" const App = () => { const [loading, setLoading] = useState(false) // 追加 const [mealName, setMealName] = useState("") ...

データの取得が始まったらtrue、完了したらfalseとするので、次のように使います。

const getMealData = async(e: React.FormEvent<HTMLFormElement>) => { e.preventDefault() setLoading(true) // 追加 ... setMealName("") setLoading(false) // 追加 }

loadingstateがtrueの時にはLoadingコンポーネントが、falseの時にはRecipeコンポーネントが表示されるようにしたいので、次のように条件を書きます。

// App.tsx ... <Form setMealName={setMealName} getMealData={getMealData} mealName={mealName} /> // ⬇追加 {loading ? <Loading/> : <Recipe mealData={mealData}/> } // ⬆追加 </div> ...

これでデータ取得中にはローディングが表示されるようになりました。次はLayoutコンポーネントを作りましょう。