Immutable.Recordを使う複数のデータモデルクラスに全く同じデータ構造や処理ロジックを持つ場合、DRY原則により、クラスを継承する必要がある。
モデルクラスの定義
export default class Hoge extends Immutable.Record({
item1: null,
item2: 99,
}) {
fuga() {
}
fuga2() {
// console.log(this.item2);
}
}
モデルクラスの継承
- デフォルト値には、親子のデフォルト定義を両方とも入れる
- 子クラスに親クラスと違う処理ロジックのみを記載する
export default class Hoge2 extends Hoge {
fuga2() {
// console.log('hello, immutable.js');
}
}
ここがポイント:Hoge2クラスを定義する時に、デフォルトObjectを記載しないこと
何故なら、Hogeは既にクラスになっているので、デフォルトObjectを渡せないからである。
そのため、デフォルトObjectは親クラス
で定義する。
Immutable.Recordは関数
Immutable.Recordはただの関数で、Immutable.Record(defaultObj)
の実行結果はRecord.Factory
(クラス)である。