【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に変換する際、関数は消してしまう仕様の様子。
残すことも可能っぽいけど、ちょっと面倒そうなのでもうあきらめることにした。
コメント
コメントを投稿