Angular 2 redux和immutable.js状态

时间:2016-10-03 06:57:27

标签: angular redux immutable.js

我使用ng2-redux,我试图使redux状态不可变。我无法做到,因为我不知道哪个接口是由不可变状态实现的。

例如,我有一个redux状态:

let IState = {
    a: {
        b: string
    };
    d: string;
};

let state: IState  = {
  a: {
    b: 'c'
  },
  d: 'e'
}

然后,不可变状态是:

let immutableState = Immutable.fromJS(state);

或者也许:

let immutableState = Immutable.Map(state);

我应该知道使用redux的不可变状态接口:

constructor(ngRedux: NgRedux<IState>) {

1 个答案:

答案 0 :(得分:1)

如果您不想使用通用的Immutable.Map,则可以使用Immutable.js Record创建一个类。

例如

1, 0

然后在NgRedux中使用您制作的类。

// define an interface
interface IState = {
    a: {
        b: string
    };
    d: string;
};

// next, use the Record constructor passing in the defaults for the class
const stateRecord = Record({
  a: null,
  d: ''
});

// construct a class that extends the return from the Record call
export class MyState extends stateRecord implementsIState {
  a: Map<string, string>;
  d: string;
  constructor(config: IState) {
    super(config);
  }
}

由于要扩展constructor(ngRedux: NgRedux<MyState>) { ... ,因此该类是不可变的。有关https://immutable-js.github.io/immutable-js/docs/#/Record

的ImmutableJs文档中有关记录如何工作的更多信息