Master Course

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

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

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

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

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