Submit Search
図解 ngrx
•
5 likes
•
2,224 views
K
Kou Matsumoto
Follow
ngrxの構造について、図解を中心に解説。
Read less
Read more
1 of 37
Download now
Download to read offline
More Related Content
図解 ngrx
1.
図解 ngrx @kou
2.
自己紹介 ● @kou ● bitbank株式会社 ●
仮想通貨(ビットコインなど)の取引所のアプリケーションを開発
3.
今日話すこと ngrxはどうやってReduxを実装 しているのか
4.
ngrxとは ● @ngrx/storeなどの、いくつかのパッケージの総称 ● Angularの状態管理を扱うために作られている ●
Reduxにかなり影響を受けている ● 食わず嫌いで使わない人が多い?
5.
図解
6.
ComponentとStoreの関係
7.
ComponentとStoreは、selectとdispatchの関係 Component Store select() dispatch()
8.
ComponentはStoreに対してActionをdispatchする Component Store dispatch() new Action()
9.
Storeはselectを通じてComponentへ必要なデータを渡す Component Store select() data$
10.
Store内部の構成
11.
Storeは3つのObservableで構成されている Store reducer$action$ state$ withLatestFrom scan
12.
action$: BehaviorSubject Store reducer$action$ state$ withLatestFrom scan
13.
action$: 新しいActionがdispatchされた時に値が流れる Store reducer$action$ state$ withLatestFrom scan dispatch(new Action())
14.
reducer$: BehaviorSubject Store reducer$action$ state$ withLatestFrom scan
15.
reducer$: Lazy-Loadなどで新しくReducerが登録された時に値が流れる Store reducer$action$ state$ withLatestFrom scan Lazy-Load
16.
state$: BehaviorSubject Store reducer$action$ state$ withLatestFrom scan
17.
state$: action$がnextされた時、最新のRecuderでStateが計算されて値が流れる おまけ: selectの内部はmap, mapTo,
distinctUntilChangedが使われている Store reducer$action$ state$ withLatestFrom scan select() Component
18.
scannedAction$: Reducerで処理された後のActionのストリーム(Subject) Stateと同時に通知される(次に説明するEffectsで使用) Store reducer$action$ state$ withLatestFrom scan scanned action$ Effects
19.
Effects
20.
Effectsとは ● @ngrx/effects のパッケージで公開されている ●
Reducer(Pure Function)で処理できない、副作用の処理を行う場所 ● ReduxでのMiddleware的な役割 ● 例) APIのHTTPリクエスト処理など
21.
StoreとEffectsの関係図 scanned action$ Store Effects dispatch() myEffect$ action$ map(), switchMap()
22.
scannedAction$: Reducerで処理された後のActionのストリーム(Subject) scanned action$ Store Effects dispatch() myEffect$ action$ map(), switchMap()
23.
myEffect$: scannedAction$をmapなどで変換したストリーム (Effectsクラス内に、処理の数だけ作成するObservableのフィールドたち) scanned action$ Store Effects dispatch() myEffect$ action$ map(), switchMap()
24.
action$: ComponentがStoreにActionをdispatchする時と同じストリーム Effectsの副作用の結果は、新しいActionとしてnextされる scanned action$ Store Effects dispatch() myEffect$ action$ map(), switchMap()
25.
Effects: APIリクエストの例
26.
例) ServerへログインのHTTPリクエストする際の一例 全体図 action$ scanned action$ Store Effects API ServerComponent login Effect$ state$ scan
27.
1. Componentが新しいLogin用のActionをdispatchする action$ scanned action$ Effects login Effect$ state$ dispatch(new LoginAction()) Component scan API
Server Store
28.
2. ReducerがLoginActionを処理して、state$, scannedAction$を更新する action$ scanned action$ Effects login Effect$ state$ scan Component
API Server Store
29.
3. Componentへはstate$の変更、EffectsへはscannedAction$の変更がそれぞ れ通知される action$ scanned action$ Effects login Effect$ state$ select() map(), switchMap(), ... scan Component
API Server Store
30.
4. EffectsがHTTPリクエストを実行する action$ scanned action$ Effects login Effect$ /login state$ Http request scan Component API
Server Store
31.
5. HTTPの結果を取得 action$ scanned action$ Effects login Effect$ /login state$ Http response scan Component API
Server Store
32.
6. EffectsがHTTPの結果に応じて新しいActionを作成する action$ scanned action$ Effects login Effect$ /login state$ dispatch(new LoginSuccessAction()) scan Component
API Server Store Or dispatch(new LoginFailureAction())
33.
7. 再度、ReducerがActionを処理して、state$, scannedAction$を更新する action$ scanned action$ Effects login Effect$ state$ scan Component
API Server Store
34.
8. HTTPの結果がComponentに通達される action$ scanned action$ Effects login Effect$ state$ select() scan Component API
Server Store
35.
以上
36.
まとめ ● ngrxはReduxではなく、Redux inspiredなRxJSのベストプラクティス ●
やっていることはいつもMVCで書いているRxJSの処理 ● ストリームの設計をする際はngrxの実装はだいぶ参考になる
37.
ありがとうございました
Download