🍃このブログは移転しました。
3秒後、自動的に移動します・・・。

MobXでuseStrict()すべきかどうか

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`とか書き味最高なので使いたい気持ち。
なし環境ならもう付けなくてもいいかな?

ここではそんなコード書くな!みたいな構造化は、こんなアノテーションとかラップするだけとかそういうレベルじゃなくて、ディレクトリとかそもそものところで明示すべきよなーとは思う。