本文へスキップ
totonoe.tech

フレームワークを整える

中級

React を整える。

= 「状態が変わると画面が描き直される」仕組みを、コードを書いて確かめる

React が初めての方は、先に そもそも React とは・どんな場面で使うか をどうぞ。

サンプルコード(クリックでエディタに挿入)

EDITOR JSX (React 18.3.1)
PREVIEW

コンソール

コードを書いて「実行」を押すと、ここに console 出力とエラーが出ます。

無限ループを書くとタブが固まることがあります。そのときは「■ 停止」を押してください。

そもそも React とは

画面を「部品」の組み合わせで作る、UI 用の JavaScript ライブラリ。

React は、Web の画面(UI)を部品(コンポーネント)の組み合わせとして作るための JavaScript ライブラリです。「データがこう変わったら、画面はこうなる」と書いておくと、データが変わったときに画面の該当部分を React が更新してくれます。Meta(旧 Facebook)が中心になって開発し、オープンソースで公開されています。

公式には「フレームワーク」ではなくライブラリと位置づけられ、画面づくりに集中した道具です。ページの切り替え(ルーティング)などは別の部品や、Next.js のような React を土台にしたフレームワークと組み合わせて使います。Vue や Svelte は同じ「画面を作る道具」の仲間で、書き方や考え方が少しずつ違います。

どこで・どんな場面で使うか

  • Web アプリの画面づくり

    管理画面、ダッシュボード、SNS のような「操作に応じて画面がよく変わる」サービスで広く使われています。

  • Next.js などの土台として

    React を土台にしたフレームワークでサイト全体を作る構成も多く、実質的に React の知識が前提になります。

  • スマホアプリ(React Native)

    同じ考え方でスマホアプリを作る React Native があり、画面の作り方の知識を活かせます。

  • 求人・学習の場面

    フロントエンド開発の求人で名前が挙がることが多く、学習教材や入門記事も豊富です。

  • 社内ツールや画面部品の共有

    ボタンや表を部品として使い回せるので、複数人・長期のプロジェクトで画面の統一を保ちやすくなります。

向いている場面・向いていない場面

  • 向いている:操作で画面が頻繁に変わる、画面数の多いアプリ。部品に分けると、直す場所が見つけやすくなります。
  • 向いている:チームで長く育てる開発。情報や人材が多く、周辺の道具も揃っています。
  • 向いていない:文章が中心の静的なサイトや、少しだけ動きを付けたいページ。素の HTML や軽い道具のほうが手早く済みます。

上の練習場に短いコードを書いて「実行」を押し、データを変えると画面がどう変わるかを試してみてください。

React が向いている場面/向かない場面

自分に合うのはどれ? 選び方を見る →

仮想DOMでUIを組み立てる、最も採用例と日本語情報が多いライブラリ。

◎ 向いている場面

  • ・ 求人・日本語の学習情報の多さを重視するとき(当サイト内で最も情報が多い)
  • ・ 複数人・長期で保守する大きめのWebアプリ
  • ・ コンポーネント単位のUIライブラリ(部品集)を多く使いたいとき
  • ・ モバイルアプリ(React Native)まで技術を揃えたいとき

△ 向かない場面

  • ・ 既存のHTMLページに少しだけ動きを足したいだけのとき(JSXやビルド環境が前提になり大掛かり)
  • ・ とにかく最速で・学習コストをかけずに動かしたいとき

React は「JSX を JS に変換してから」動く。

ブラウザは JSX をそのまま読めません。このページでは typescript.js の変換機能(JSX 専用のオプション)を使い、React.createElement 呼び出しに変換してから classic script として実行しています。

  • ①

    useState — 状態を持つ

    useState(0) は「現在値」と「更新用の関数」の組を返します。更新関数を呼ぶと、React がコンポーネントを再描画します。

  • ②

    props — 親から子へ値を渡す

    コンポーネントは関数の引数のように { name, age } を受け取ります。子は props を書き換えられません(一方向のデータの流れ)。

  • ③

    key — 一覧の中の「どれ」を教える

    配列を map で描画するとき、React は key を手がかりに「どの要素が変わったか」を判断します。インデックスではなく id のような一意な値を使うのが基本です。

  • ④

    useEffect — 画面反映のあとに動く

    useEffect の中身は、レンダー本体が終わって画面に反映されたあとに実行されます。依存配列([count])の値が変わるたび、前回分のクリーンアップ → 今回分の実行、の順で呼ばれます。

React(JSX)と Preact + htm の違い

上の「Preact + htm」タブでは、JSX の変換ステップなしで同じカウンタを書いています。

観点 React(JSX) Preact + htm
マークアップの書き方 <div>{count}</div>(JSX) html`…`(値はドル記号と波括弧で埋め込む)(タグ付きテンプレート)
実行前の変換 必要(JSX → JS。ここでは typescript.js) 不要(そのままブラウザの JS として動く)
読み込み方 UMD の <script>(classic script) ESM の import(module script)
ライブラリ本体の大きさ React + ReactDOM(比較的大きい) Preact(数KB。React 互換 API)

このページについて

ライブラリは cdn.jsdelivr.net から読み込みます。 書いたコードと実行結果は端末内で完結し、外部へ送信しません(送信ゼロ)。 プレビューはサンドボックス化した iframe で、このページや端末のデータには触れません。

🌐 「React(JSX)」タブでは React 18.3.1 と ReactDOM 18.3.1(UMD)、 JSX 変換用の typescript.js(/typescript/ と同じ処理系)を、 「Preact + htm」タブでは Preact 10.29.8 と htm 3.1.1 を、 「実行」を押した最初の1回だけ取得します(プログラムを受け取るだけの通信で、書いたコードや実行結果は送られません)。

このツールについて

コンポーネント・props・状態(state)は、説明を読むだけではなかなか腹落ちしません。ここでは実際にコードを書き換えて実行し、画面と console の両方で「何が起きたか」を確認できます。

ブラウザ内 React 18 で useState・props・一覧描画・useEffect の順序を体験。JSX は typescript.js で変換してから実行。JSX 変換なしの Preact + htm 版にも切り替えられます。

主な機能

  • 4サンプル(useState のカウンタ・props・一覧描画 map/key・useEffect の実行順序)
  • JSX は typescript.js(/typescript/ と同じ処理系)で変換してから実行
  • 「Preact + htm」タブで JSX 変換なしの同等コードに切り替え
  • console 出力・エラー・停止ボタンつきのサンドボックス iframe
  • React/ReactDOM/Preact/htm は cdn.jsdelivr.net から初回のみ・送信ゼロ

よくある質問

Q. 入力した React のコードはサーバーに送られますか?

A. 送られません。JSX の変換(typescript.js)も実行(React/ReactDOM)もブラウザ内で完結します。外へ出る通信は処理系のダウンロード(初回のみ)だけです。

Q. JSX はどうやって実行できるコードになるのですか?

A. /typescript/ と同じ typescript.js の transpileModule で JSX を React.createElement の呼び出しに変換してから実行しています。型検査はしていません。

Q. 「Preact + htm」タブは何が違いますか?

A. JSX の変換なしで、タグ付きテンプレートリテラル(html`...`)だけで同じ画面を書いた版です。Preact は数KB の軽量ライブラリで React と似た API を持っています。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

データの時点:各ページに記載の版(各プロジェクトの公式リリース)

データの更新予定の一覧

totonoe.tech を運営する株式会社Koinobori は、法人向けの研修サービス「NOBORIBA®」も運営しています。 ここで手を動かした内容を、講師から教わる形の研修です。このページの道具は無料のまま、登録もいりません。

運営サイト

私たちが運営するサイト