Nuxt.js で Atomic Design ベースの設計をする時にコンポーネントのあり方
備忘録。
Nuxt.js で Atomic design を実践する際の各コンポーネントの役割が自分の中でまとまってきたので書き残す。
Atom
- button や input などの単一の HTML 要素をラップしたもの
- これによってアプリ全体で共通の CSS が適用できる
- button をラップした場合、
AppButton
などの名前にする - 使い勝手は変えないように、極力元と同じイベントを emit するようにする
- 例: button は
click
イベントを emit する
- 例: button は
- ビジネスロジックは入れない
Molecules
- Atoms の組み合わせ
- よくある例だと入力フォームとボタンをセットにした検索フォームなどが該当する
- 位置づけ的には「よく見かける UI パーツ」
- ここにもまだビジネスロジックは入れない方がいいと思う
Organisms
- Atom, Molecules の組み合わせで作る
- 位置づけ的には「意味のある実際の画面要素」
- ヘッダ, 検索結果表示部分など
- もう一つの位置づけとして、「Molecules にビジネスロジックを吹き込む」
- Organisms からはビジネスロジックを持ってもいいし、Vuex と干渉してもよい
Templates, Pages
Nuxt.js の場合、templates
と pages
が相当する(と思う)。