Michel Weststrate: Real World MobX — ReactNext 2016 - YouTube
なんとなしにこのビデオを見直してて、終わり3分くらいに質問コーナーがあってそこで聞かれてた。
`useStrict()`とは
そもそもは、どこからでもStateを変更できそうで不安・・っていう声に対応するために入れた機能。
const state = mobx.observable({ x: 1 }); state.x = 10; // ok mobx.useStrict(true); state.x = 100; // error const modState = mobx.action((n) => { state.x = n; }); modState(100); // ok
という感じになる。
作者のMichelは
このビデオの時点では使ってないらしい。
- 自分が行儀の悪いコードを書くことはない
- 適切なやり方でStateを管理してるし最低限しかStateがない
なるほど。
`useStrict()`のPros/Cons
まあメリットもあるよとのこと。
- Stateを変更するべき場所を明示できる
- コードとしての構造化
- 複数のderivationsをまとめてくれる
- 元`transaction()`、現`runInAction()`相当のこと
使わないメリットとしては
- `Promise`チェーンとかコールバックをいちいち`action`化しなくていい
- Non-Decorators環境で、メソッドをいちいちラップする関数作らなくていい
って感じかなー。
必要なときに自分で`runInAction()`するの面倒かもーって思ったけど、適切にStateを設計してればそもそも必要になることは滅多にないはず・・。
あったとしてもラップすればいいだけやし。
ただDecoratorsあり環境なら、`@action.bound`とか書き味最高なので使いたい気持ち。
なし環境ならもう付けなくてもいいかな?
ここではそんなコード書くな!みたいな構造化は、こんなアノテーションとかラップするだけとかそういうレベルじゃなくて、ディレクトリとかそもそものところで明示すべきよなーとは思う。