コース一覧
React設計:useEffectとコンポーネント分割
useEffect

React設計:useEffectとコンポーネント分割

副作用、useEffect、依存配列、クリーンアップ、stateの持ち上げ、propsの受け渡し、1コンポーネント1責務、部品ツリーとフォルダ構成を扱う全19レッスンの設計コースです。JavaScript版プロフィールサイトを、状態と責務が整理されたReactアプリとして完成させます。

1
useEffectのきほん
01. 副作用とは10分
02. useEffect15分
03. 依存配列15分
04. タイトル連動15分
05. 時計とクリーンアップ15分
06. つくる - ヘッダー時計20分
07. 第7章クイズ15分
2
コンポーネント分割の設計
01. 部品ツリーで考える10分
02. stateを持ち上げる15分
03. propsのバケツリレー15分
04. 1部品1責務15分
05. フォルダ構成10分
06. つくる - ツリー整理20分
07. 第8章クイズ15分
3
総合制作
01. 全セクションReact化20分
02. メモウィジェットReact版20分
03. 命令的vs宣言的10分
04. 自由拡張20分
05. 完成と次のステップ10分

useEffect

依存配列を書くか書かないか

表示されたことをきっかけにする

前のレッスンで、副作用の置き場所は2つあると学びました。操作がきっかけならイベントハンドラー、表示されたこと自体がきっかけなら useEffect です。

「ページが出たらデータを取りに行く」「表示された時刻を記録する」のような仕事には、押すボタンがありません。こういうときに使うのが useEffect です。

書き方

useEffect は引数を2つ取ります。1つめが実行したい処理の関数、2つめが依存配列です。

JavaScript (JSX)

import { useEffect } from "react"; export default function App() { useEffect(() => { console.log("画面に出ました"); }, []); return <h1>あおいのプロフィール</h1>; }

2つめの [] は「何にも依存しない」という意味です。こう書くと、中の処理は 最初の描画が終わったあとに1回だけ 走ります。部品が画面に現れることをマウントと呼ぶので、「マウント時に1回」と言います。

大事なのは、描画の前ではなく あと だという点です。React はまず画面を出し、それが終わってから effect を呼びます。だから画面の表示が effect に待たされることはありません。

画面に出したいときは state と組み合わせる

console.log は開発者ツールにしか出ません。結果を利用者に見せたいときは、effect の中で state を更新します。

JavaScript (JSX)

const [status, setStatus] = useState("読み込み中"); useEffect(() => { setStatus("読み込み完了"); }, []);

まず「読み込み中」の画面が出て、そのあと effect が走って「読み込み完了」に変わります。1周ぶん遅れて切りかわる、この流れを覚えておいてください。

つまずきどころ

useEffect は import が必要です。import { useState, useEffect } from "react"; のように、使うフックをまとめて書きます。また、2つめの [] を書き忘れると毎回のレンダーで走ってしまいます。そこは次のレッスンで扱います。

演習

表示された時点でメッセージを切りかえます。

ヒント

useEffect(() => { ... }, []) の形です。第2引数の空配列を忘れないでください

画面に出るのは status の中身です。setStatus("読み込み完了") と書きます

App.jsx
プレビュー

できているか

  • h1 に「あおいのプロフィール」と表示されている
  • 状態を出す p が残っている
  • 表示されたあと「読み込み完了」に変わっている
エディタを読み込んでいます