本文へスキップ
totonoe.tech

フレームワークを整える

初級

Preact を整える。

= React と同じ API を、JSX コンパイラなしの htm テンプレートで動かす練習場

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

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

EDITOR JS + htm(JSX 変換なし・Preact は htm 3.1.1 に同梱)
PREVIEW

「▶ 実行」を押すと、ここに結果が表示されます。

コンソール

console.log の出力とエラーがここに出ます。

「④ useEffect(タイマー)」は1秒ごとに再描画します。「■ 停止」を押すとタイマーごと片付きます(プレビューの iframe を作り直すため)。 無限ループなど重い処理を書くと、プレビューが固まることがあります。

そもそも Preact とは

React とほぼ同じ書き方で、ずっと小さく動く UI の道具。

Preact は、画面を「コンポーネント」という部品の組み合わせで作る JavaScript のUI ライブラリです。ボタンや一覧などを関数として書き、状態が変わると画面が更新されます。React と互換性のある API を持ちながら、配布サイズがとても小さいのが最大の特長です。

React 向けに書かれたコードの多くを、少しの調整で動かせます(互換レイヤーを使う方法もあります)。画面の表示を軽くしたい場面や、ページの一部にだけ動く部品を足したい場面でよく選ばれます。

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

  • 読み込みの軽さが大事なページ

    サイズが小さいぶん読み込みが速く、回線が細い環境でも画面が早く出ます。

  • 既存ページの一部だけを動かす

    ビルド環境を大きく作らず、サイトの一部に動く部品を足したいときに使われます。

  • 埋め込みウィジェット

    他のサイトに貼り付けて使う小さな部品など、配布サイズを抑えたいものに向きます。

  • React の学習・移行の足がかり

    コンポーネント、props、hooks といった考え方は React と共通で、学んだことが活きます。

  • ビルドなしの試作

    htm と組み合わせると、JSX の変換なしでブラウザだけで動かせます。この練習場もその方式です。

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

  • 向いている:サイズと速さを重視する画面。React の書き方に慣れていれば、そのまま使えます。
  • 向いている:小さな部品をページに足す、ビルドなしで試すなど、身軽に始めたいとき。
  • 注意:React 向けの周辺ライブラリをそのまま使うには、互換レイヤーなどの調整が必要な場合があります。

上のプレイグラウンドで、コンポーネントを書き換えて、右側のプレビューにどう反映されるかを試してみてください。

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

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

React互換のAPIを、はるかに小さい配布サイズで動かす軽量版。

◎ 向いている場面

  • ・ 配布サイズを最小にしたいが、Reactと同じAPI(useState等)の書き味も欲しいとき
  • ・ ReactのコードをPreact/compat経由でそのまま流用したいとき
  • ・ Deno製のFreshでSSRしたいとき

△ 向かない場面

  • ・ Reactそのものの求人量・ライブラリの豊富さを必要とするとき
  • ・ JSXの変換ステップなしで一切のビルドを避けたいとき

Preact は「JSX 変換なし」でも同じ書き味になる

htm のタグ付きテンプレートリテラル(html`...`)は、ブラウザがそのまま実行できる標準の JavaScript 構文です。ビルド環境(バンドラ・トランスパイラ)を用意しなくても、コンポーネント・props・hooks はそのまま使えます。

  • ①

    props — 親から子へ値を渡す

    コンポーネントは関数の引数のように { name, age } を受け取ります。htm では別のコンポーネントをタグとして使うとき <${Component} .../> の形で書きます。

  • ②

    useState — 状態を持つ

    useState(0) は React と同じ API です。「現在値」と「更新用の関数」の組を返し、更新関数を呼ぶと再描画されます。

  • ③

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

    配列を map で描画するとき、key を手がかりに「どの要素が変わったか」を判断するのは React と同じです。

  • ④

    useEffect — 片付け(クリーンアップ)を必ず書く

    setInterval のように「動き続けるもの」を始めたら、useEffect が返す関数で必ず止めます。依存配列が空([])なので、最初の描画時に1回だけ実行されます。

React との違い(事実だけ)

/react/ の「Preact + htm」タブと同じ考え方を、こちらは4本のレッスンとして独立させたページです。

観点 Preact + htm React(JSX)
ライブラリ本体の大きさ Preact(数KB。React 互換 API) React + ReactDOM(比較的大きい)
API の互換性 useState・useEffect 等、名前も使い方も React と同じ (基準側)
マークアップの書き方 html`<div>${count}</div>`(タグ付きテンプレート) <div>{count}</div>(JSX)
実行前の変換 不要(そのままブラウザの JS として動く) 必要(JSX → JS のコンパイル)
読み込み方(このページ//react/) ESM の import(module script) UMD の <script>(classic script)

このページについて

ここで動くのは本物の Preactです。htm 3.1.1 の「standalone」バインディング(Preact 本体を同梱した1ファイル)を、サンドボックス化した(allow-scripts のみの)iframe の中で ESM として import して実行します。

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

このツールについて

Preact は React 互換の API を、はるかに小さい配布サイズで動かす軽量版です。ここでは JSX 変換を使わず、htm のタグ付きテンプレートリテラル(html`...`)だけでコンポーネントを書きます。

JSX コンパイラなしで、React と同じ API を htm のタグ付きテンプレートで書く練習場。コンポーネント・props・一覧の key・useEffect を4課題で。

主な機能

  • 4課題(コンポーネントと props/useState/リストと key/useEffect のタイマー)
  • htm の standalone(Preact 同梱)を配信元から ESM import
  • JSX コンパイラ不要
  • 選び方の枠で React との向き不向きを比較・送信ゼロ

よくある質問

Q. Preact と React は何が違いますか?

A. Preact は React と同じ API(useState・useEffect など)を、小さい配布サイズで提供するライブラリです。このページでは JSX コンパイラを使わず、htm のタグ付きテンプレートで同じことを書きます。

Q. なぜ JSX を使わないのですか?

A. JSX はブラウザがそのまま実行できないため、事前に JavaScript へ変換する処理が必要です。htm のタグ付きテンプレート(html`…`)は標準の JavaScript 構文なので、変換なしでブラウザが実行できます。

Q. preact 本体と preact/hooks を別々に読み込まないのはなぜですか?

A. htm の standalone は Preact 本体を同梱しています。別途 preact を読み込むと Preact が2つになり、hooks の内部状態が食い違って壊れる恐れがあるため、1ファイルだけを読み込んでいます。

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

続けて整える

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

データの更新予定の一覧

運営サイト

私たちが運営するサイト