Slide 1

Slide 1 text

componentの分け方 monotips #14

Slide 2

Slide 2 text

前回の続きです。詳しくは↓ https://speakerdeck.com/hxrxchang/spafalsezhuang-tai-guan-li-d860a75 0-150e-46d0-a14f-eb1730b9c875

Slide 3

Slide 3 text

前提知識: component指向、状態管理 SPAでは、入れ子構造になっているcomponentの組み合 わせでアプリケーションを構成する。 状態はReduxとかvuexとかngrxみたいなライブラリを使っ て管理する。

Slide 4

Slide 4 text

store component client side Backend HTTP dispatch action Select

Slide 5

Slide 5 text

Componentの分け方 Container Component Presentational Component

Slide 6

Slide 6 text

Container Component Storeから状態をSelectする。 子供の関係にあるPresentational Componentに値を 渡す。 Actionをdispatchする。

Slide 7

Slide 7 text

Presentational Component 親の関係にあるContainer Componentから 値を受け取り、それを描画するだけ。 ロジックは極力持たない。

Slide 8

Slide 8 text

両方を囲っているのが detailComponent => Container Component 画像の部分は imageViewComponent => Presentational Component 詳細の部分は detailInfoComponent => Presentational Component

Slide 9

Slide 9 text

componentを分ける理由 reducer / component の責務をさらに分離。 storeとやりとりするcomponent(container component)と、 viewを表示するcomponent(presentational component)の 責務を分けて、どこでなにをやってるかさらに分かり易くする。 テストを書き易くする

Slide 10

Slide 10 text

以上が前回の振り返りです。

Slide 11

Slide 11 text

課題: componentの分け方、粒度 - 肥大化するcontainer component と presentational component - container component , presentational component だけだと足りない!!

Slide 12

Slide 12 text

肥大化のデメリット - 果てしない行数は可読性を下げる。 - component指向なのに再利用ができない。 - 1つのcomponentに複数機能があるとテストがしづらい。

Slide 13

Slide 13 text

componentの分け方 - componentの粒度、役割を決めないとこれもまた難読化に - 分けるにしても人によって粒度がバラバラ - 個人プロジェクトでも時期によってあーでもないこーでもない - componentの分け方のルール = “設計” が大事

Slide 14

Slide 14 text

Atomic Design ページを - Atoms (原子) - Molecules (分子) - Organism (有機体) - template (エンジニアは意識しなくても良さそう) - pages に分ける。

Slide 15

Slide 15 text

Atoms これ以上分解不可能な最小単位 例: (単体の)テキストボックスやボタンなど Molecules Atomsを組み合わせて最小単位の機能を作る 例: テキストボックスとボタンを組み合わせて 検索フォームを作る

Slide 16

Slide 16 text

Organisms 1つの独立した機能となるもの。 MoleculesとAtomsを組み合わせる。 Storeとやりとりする。 Pages Organismsを組み合わせて、ページを作る

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

componentの単位 - basics - components - containers - pages storeとやりとりするのはcontainersとpages

Slide 19

Slide 19 text

Atomic Designでもオリジナルの設計でも共通するもの - storeとやりとりするcomponentと、 表示専用のcomponentの分離 = container component と presentational componentの拡張

Slide 20

Slide 20 text

Nuxtが良さそう - pages dirでルーティング - components dirの中でatoms, molecules, organisms => これだけで設計完了 - 導入事例がたくさん - reduxよりvuexの方がわかりやすそう。 - typescript, rxjs要らない

Slide 21

Slide 21 text

No content