Open4
React Developer Roadmap
CLI Tools
Vite
- 読み方は
/vit/
(ヴィート) - より速く無駄のない開発体験を提供することを目的としたビルドツール
Viteの特徴
- 非常に高速な開発サーバー
- ネイティブESモジュールを利用
- Hot Module Replacement (HMR)
- ページをリロードせずにモジュールを更新する
- 毎回全体をバンドルしないので高速
- プロダクションでは Rollup でコードをバンドル
- バンドルされていない ESM をプロダクション用にリリースするのは非効率なため ^
その他の特徴
- NPM の依存関係の解決と事前バンドル
- TypeScript のサポート(型チェックはしない)
- JSX のサポート
- CSS ファイルのインポート
-
<style>
タグを介して挿入される - CSS Modules のサポート ^
- 各種 CSS プリプロセッサーのサポート(sass, less, stylus)
-
- 静的なアセットをサポート
- 静的アセットをインポートすると、提供時に解決されたパブリック URL が返される
- Glob のインポート
const modules = import.meta.glob('./dir/*.js')
- Dynamic Import
- 変数をつかった動的インポート
const module = await import('./dir/' + file + '.js')
- WebAssembly のインポート
import init from './example.wasm?init'
- Web Workers
- ビルドの最適化
- CSS のコード分割
- スタイルが使われているページにのみ使われているスタイルを読み込み
- プリロードディレクティブの生成
- 非同期チャンク読み込みの最適化
- CSS のコード分割
Vite による React プロジェクトの初期化方法
# npm 7+, extra double-dash is needed:
npm create vite@latest my-vue-app -- --template react-ts
# yarn
yarn create vite my-app --template react-ts
コマンドラインインターフェース
# 開発サーバーを起動
yarn dev
# プロダクション用にビルド
yarn build
# プロダクション用ビルドをローカルでプレビュー
yarn preview
マルチページにも対応
// vite.config.js
import { resolve } from 'path'
import { defineConfig } from 'vite'
export default defineConfig({
build: {
rollupOptions: {
input: {
main: resolve(__dirname, 'index.html'),
nested: resolve(__dirname, 'nested/index.html'),
},
},
},
})
環境変数
.env ファイル
.env # 全ての場合に読み込まれる
.env.local # 全ての場合に読み込まれ、gitには無視される
.env.[mode] # 指定されたモードでのみ読み込まれる
.env.[mode].local # 指定されたモードでのみ読み込まれ、gitには無視される
- 環境変数が誤ってクライアントに漏れてしまうことを防ぐために、VITE_ から始まる変数のみが Vite で処理されたコードに公開される
- HTMLでの置換
<h1>Vite is running in %MODE%</h1>
<p>Using data from %VITE_API_URL%</p>
メモ: React の流儀
React でユーザインターフェースを構築する際には、まず UI をコンポーネントと呼ばれる部品に分割します。次に、各コンポーネントのさまざまな視覚的状態を記述します。最後に、複数のコンポーネントを接続し、それらの間をデータが流れるようにします。
モックアップから始めよう
- デザイン
- API から返ってくるデータ(JSON)
ステップ 1:UI をコンポーネントの階層に分割する ⇒ コンポーネントに名前をつける
- モックアップのコンポーネントを四角で囲んで名前をつけていく
- 「単一責任の原則」にもとづいて1つのコンポーネントは1つのことだけを行うのが理想
- JSONの構造にあわせてみる方法も
ステップ 2: React で静的なバージョンを作成する ⇒ コンポーネントを作る
- まずはデータモデルからUIをレンダーするバージョンを作成
- 静的なバージョンをつくって、あとでインタラクティブなものにする
-
コンポーネント
を作成し、props
経由でデータを渡す-
state
はインラタクティビティなので使わない
-
- 構築の着手順
- 簡単な構成の場合:トップダウン
- 複雑な構成の場合:ボトムアップ
- 単方向データフロー (one-way data flow) :データがトップレベルコンポーネントからツリーの下の方にあるコンポーネントに流れていく構造
ステップ 3:UI の状態を最小限かつ完全に表現する方法を見つける ⇒ state を見つける
- UI をインタラクティブにするには
state
を使う -
state
とは、アプリが記憶する必要のある、変化するデータの最小限のセットのことである -
state
で一番大事な原則は DRY 原則 -
state
ではないもの- 時間がたっても変わらないもの
- 親から
props
経由で渡されるもの - 既存の
state
やprops
から計算可能なもの
ステップ 4:state を保持すべき場所を特定する ⇒ state を保持するコンポーネントを特定
- その
state
を使ってレンダーするすべてのコンポーネントを特定 - それらのもっと近い共通の親コンポーネントを見つける
-
state
がどこにあるべきかを決定する
- コンポーネントに
state
を追加するにはuseState()
フックを使用- フックとは、React に「接続("hook into")」するための特殊な関数
ステップ 5:逆方向のデータフローを追加する
-
state
を更新する関数を親要素から子要素に渡す - 子要素の中でイベントハンドラを追加し、親要素の
state
を設定
🚧 Components
把握しておくべき項目
関数コンポーネント
- アプリのために再利用可能な UI 要素
- React アプリでは UI のあらゆる部品はコンポーネント
- コンポーネントはネスト可能
- コンポーネントの定義はネストさせてはいけない(同じ位置の異なるコンポーネントはstateをリセットする)
- 関数コンポーネント自体は普通の JavaScript の関数
- 名前は大文字から始める必要がある
- パラメーターとしてデータを受け取ることもあれば、受け取らないこともある
- 返り値として JSX を返す
- React フックを使って管理される
state
を持つこともできる
JSX
- JavaScript XML の略
- JavaScript ファイル内に HTML のようなマークアップを記述できるようにするもの