【Expo / React Native】mobx-persistを使ってクラスを永続化した場合に、setter/getterが動かない

React Nativeで永続化したくて、Mobxの永続化が可能なmobx-persistを使いました。



mobx-persistはプリミティブ型なら特に問題なく永続化/読み出しが可能ですが、オブジェクトなどは注意が必要です。



基本的にはプリミティブ型に変換してstoreに保存し、取り出す際に変換して戻す、といったことをした方が安全ですね。



で、今回はクラスを定義してそいつをstoreに保存、永続化しようとしました。



諸悪の根源:Date型



Date型なのでnumberで保存してgetで変換して戻す形にしたのですが、今思えばこれが諸悪の根源ですね。



こんなクラスを書いていました



export default class HogeClass {
/** ID */
id: string;

/** 作成日時 */
private _createdAt: number;

/** 更新日時 */
private _updatedAt: number;

public get createdAt(){
return new Date(this._createdAt);
}

public get updatedAt(){
return new Date(this._updatedAt);
}
}



で、これを動かします。



すると、なぜかgetを呼んでも実行されず、undefinedが返ってくる・・・。



どうも、mobx-persistで永続化するときにメソッドはちゃんと保存できないようです。



まぁ、全体的にstringになっちゃうっぽいので仕方ないですね。



JSON.stringfyとか使えばいい感じになったりするのかしら?






追記



どうやら、JSON.stringifyの仕様によるものらしい??



JSON.stringifyはオブジェクトをStringに変換する際、関数は消してしまう仕様の様子。



残すことも可能っぽいけど、ちょっと面倒そうなのでもうあきらめることにした。



コメント

人気の投稿