へなちょこSEの考察

0x22歳のへなちょこSEが、日々思うことを考察します。自社内、金融系を経て現在法人系PKG開発に従事。

【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に変換する際、関数は消してしまう仕様の様子。

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