带对象的 ImmutableJs

ImmutableJs with Object

是否可以这样使用immutablejs

模态

class PeriodModel {
    constructor(
        id,
        title,
    ) {
        this.id = id;
        this.title = title;
    }
}

export default PeriodModel;

ImmutableJs

let immutable = Map(new PeriodModel(1, 'title!'));

或者它不再是一成不变的了?通常我会这样做:

let immutable = Map({ id: 1, title: 'title!'});

如果这是好的做法,请告诉我。

我不能说这是好事还是坏事,但你的做法似乎行不通;它不会制作不可变地图,它只会制作 PeriodModel。

我向您的 class 添加了一个方法,toObject returns 是 class 属性的普通对象。

class PeriodModel {
    constructor(
        id,
        title,
    ) {
        this.id = id;
        this.title = title;
    }

    toObject() {
        return {
        id: this.id,
        title: this.title
      }
    }
}

const periodMap = Immutable.fromJS(new PeriodModel(1, 'title!').toObject());
const periodMapWithoutMethod = Immutable.fromJS(new PeriodModel(1, 'title!'));

periodMap 将是一个不可变映射,但 periodMapWithoutMethod 将是一个普通对象。

我想你要找的是Record。 它是一种数据结构,提供的库具有显式字段并且特别适合您要执行的操作。

另一方面,Map 对象只是通用容器。你应该选择你喜欢的一个,Record 对象在 Typescript/Flow 中变得非常有用。