本文へスキップ
totonoe.tech

フレームワークを整える

初級

Preact を整える

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

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

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

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

CONSOLE

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

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

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の「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

KOINOBORI ECOSYSTEM

私たちが運営するサイト