我使用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>) {
如果你不想使用泛型不可变。Map,你可以使用Immutable.js Record来创建一个类。
。
// 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);
}
}
然后在你的NgRedux中使用你创建的类。
constructor(ngRedux: NgRedux<MyState>) { ...
由于您正在扩展stateRecord
,因此该类是不可变的。关于ImmutableJs文档中记录如何工作的更多信息,请访问https://immutable-js.github.io/immutable-js/docs/#/Record