MobXという状態管理ライブラリについて調べた
MobXは、JavaScriptで状態管理を簡単かつ効率的に行うためのライブラリ
リアクティブプログラミングの概念に基づいていて、アプリケーションの状態が変化した際に自動的にUIが更新される仕組みを提供する
基本概念
Observable
MobXはオブジェクト、配列、マップなどを監視可能にする
これにより、状態が変更されると自動的に変更を検知するObserver
ReactなどのUIフレームワークと組み合わせる場合、Observerとして機能するコンポーネントはObservableの変更を検知して再レンダリングするComputed
Observableから計算される派生状態
依存するObservableが変更されると、自動的に再計算されるAction
状態を変更する関数
Observableを直接変更するのではなく、Actionを通じて状態を変更することが推奨される
主な特徴
- リアクティブ:状態とUIの同期が自動的に行われる
- ボイラープレートの少なさ:Reduxなどに比べて設定が少なく、シンプルなコードで管理可能
- パフォーマンス:必要な部分だけを更新するため、高パフォーマンス
どんな場合に使うべきか
- 状態管理が複雑になりがちなアプリケーション(特にフォームやリアルタイムデータの同期)
- Reduxのような明示的なフローが必要ない場合や、ボイラープレートを減らしたい場合
使い方
例
import { makeAutoObservable } from 'mobx'; import { observer } from 'mobx-react-lite'; class Store { @observable accessor count = 0; increment() { this.count++; } get doubleCount() { return this.count * 2; } } const store = new Store(); const Counter = observer(() => { return ( <div> <p>Count: {store.count}</p> <p>Double Count: {store.doubleCount}</p> <button onClick={() => store.increment()}>Increment</button> </div> ); });
従来の状態管理アプローチに対するMobXの利点
- 依存関係の自動追跡と更新
- 細かい粒度のサブスクリプションによるオーバーサブスクリプションの削減
- 同期実行による状態の一貫性
- MobXは、RxJSのように、すべてを同期的に実行する
- これにより、状態の一貫性が保証 される
- データグラフによる表現力の向上
- MobXは、アプリケーションの状態をグラフ を使用して表現することを推奨している
- グラフを使用すると、参照整合性を確保し、データの重複を回避できるため、派生値が最新の状態に保たれることが保証される
- また、グラフは、問題領域のメンタルモデルに近い形で状態を表現できるため、複雑なアプリケーションの状態管理に適している
- 簡潔で宣言的なコード