Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Reduxに依存しない 副作用の合成
Slide 2
Slide 2 text
背景
Slide 3
Slide 3 text
背景 ● Mobx、Recoilなどの、Reduxに代わりうる状態管理ライブラリが普及してきた ● 一方で、Redux-Sagaのような複雑な副作用合成システムを使いたければ、 Reduxしか選択することが (実質)できない ● Redux-Sagaとは違う、「状態管理システムとは独立した副作用合成システム 」が必要
Slide 4
Slide 4 text
関数合成による 副作用の合成 https://github.com/neutron63zf/weakref-function-composer-sample
Slide 5
Slide 5 text
シンプルな合成 APIはinject/wrappedの2つのみ 副作用を合成したい関数と同じ型の値を返す関数を 受け取り、副作用を実行する関数 (g1, g2) injectは第一引数の関数に副作用を結びつける wrappedは副作用が結びついた関数を返す
Slide 6
Slide 6 text
多段合成 wrappedは実行された時点での合成された関数を返 すので、 右のように記述すれば副作用の関数の中でさらに 別の副作用を呼び出す事もできる。
Slide 7
Slide 7 text
特徴と課題
Slide 8
Slide 8 text
特徴(Pros) ● 小さい(40行程度) ● 関数に副作用となる関数をラップしていくだけの直感的な動作(シンプル) ● 型フレンドリーである ● 使う側が「副作用を発生させるかどうか」を制御可能 ● 副作用をRedux-Sagaのように仮想的な別プロセスで回すのではなく、関数の合成をしているだけなの で、「次の行に移ったときには副作用の実行は終わっている 」(実行タイミングがわかりやすい)
Slide 9
Slide 9 text
課題(Cons) ● Redux-Sagaほど表現力は高くない(yieldによるチャンネルの合成など) ○ 書けない事もないが結局 Redux-Sagaの再実装になってしまう ● コールスタックを消費するので、無限ループができない ○ trampolineなどのテクニックを使う事で回避可能
Slide 10
Slide 10 text
まとめ
Slide 11
Slide 11 text
まとめ ● Reduxに依存しない副作用の合成の仕方が求められている ● シンプルな関数合成で副作用を合成するというやり方がある ● 一定の課題はあるものの、特定の局面では力を発揮するかもしれない