More Web Proxy on the site http://driver.im/ニコニコ生放送の watch ページを MobX で作り直している話
- 6. なぜ作り直しているのか
• 第2世代の問題点
– デプロイが遅い
– デザイン単体の確認がしづ
らい
– Groovy Template が独特
– データを管理しているのは
バックエンドチームのコード
• → データを提供する仕組みが
よく分からない
– jQuery つらい
– Global CSS つらい
– モノリシックつらい
- 23. Redux 試してやめた理由 1: 型
• connect の mapStateToProps(値) と
mapDispatchToProps(アクションを呼ぶコールバック) が別
れており、VC の Props の型(値とコールバックで別れてお
らず、1個)を利用できない
• connect で描画最適化した VC の Organism のラッパを VC
の Atomic Design Template に渡すためには、Templateで
Organismの型を ReactNode に緩める必要があり、VC は
Props の型情報を失うし、CCの都合にVCが依存してしまう
• connectの型パズルが難しい
– とにかく怒る
– なんでインターフェース10個位あるの…
- 28. MobX 採用理由: 型
• もともと TypeScript で書かれており、型だけ古い
とか複雑みたいなことがない
• 各 organism の VC をラップして描画最適化でき、
その際に Props の型情報を失わない
• h[ps://mobx.js.org/best/react-performance.html
• observer (HogeViewComponent) の型が
React.ClassicComponentClass<HogeVCのProps>
– VCのAtomic Design Templateで各Organismを
React.Component<HogeVCのProps> で受け取れて、VCは型情報
を失わずにコーディングできる
- 29. MobX 採用理由:その他
• Store を複数個作れる
– organism 単位でいつでも切り出したいアーキテクチャ
と相性がいい
• Store と Aceon をひとまとめにできるので、
「 Aceon からStore のデータを見たいけどできな
い」問題が解決される
– そもそもほとんどのケースで Aceon を分離する必要
性をあまり感じない
- 30. MobX 所感
• シンプル。お作法が特にない (not フレームワー
ク)
– 柔軟
– 自分たちのお作法を決める必要あり
• React.setState より汎用的な状態管理ができる
– h[ps://medium.com/@mweststrate/3-reasons-why-i-
stopped-using-react-setstate-ab73fc67a42e
• Observable 変化に勝手に反応するのでとても楽
- 36. Store.ts
• Flux のStore じゃないよ!
– 命名由来: h[ps://mobx.js.org/best/store.html
• ObservableなStateを保持し、状態を管理
– @aceon で state を書き換えるメソッドを提供
– @computed で state から新たな state を計算する
メソッドを提供
– APIやLocal Storageへアクセスしてデータ取得
- 53. MobX って RxJS と似てない?
• h[ps://github.com/mobxjs/mobx/wiki/Mobx-
vs-Reaceve-Stream-Libraries-(RxJS,-Bacon,-
etc)
• 実際 RxJS で書ける
• ほとんどのケースでは MobX で必要十分