DefaultValue
Recoil の DefaultValue クラス
Recoil state の value が不定または "初期値" であることを表すために使われるクラスで、次の2つのケースで利用される
例1)selectorFamily の param に初めて使うパラメータを入れたのち、useSetRecoilState を updater (現在の値を受け取って新しい値を返す関数) として使った場合、現在の値として DefaultValue インスタンスが与えられる 例2)useResetRecoilState で得られる reset 関数をコールしたとき、selector の set オプションの第二引数 newValue には DefaultValue インスタンスが与えられる。これは "初期値にしてください" というシグナルである ある value が DefaultValue かどうかを知るにはこう書く
code:isDefautValue.js
import { DefaultValue } from 'recoil';
if(value instanceof DefaultValue) {
// value は不定、または初期値を意味する
} else {
// なんらかの value が与えられている
}
DefaultValue はシンボルではないので、次の例は間違い
code:wrong.js
import { DefaultValue } from 'recoil';
if (value === DefaultValue) {
// DefaultValue はクラスなので、この比較に意味はない
}
if (value === new DefaultValue()) {
// DefautValue インスタンスは異なる参照を持つので、この比較は常に false を返す
}
JavaScript では慣例的に undefined がよく使われるが、これでは「undefined という値をセットしたい」時と「値をリセットしたい」という時を区別できないので、DefaultValue という特別なクラスのインスタンスが使われているものと思われる