2017-11-17 13 views
0

還元できないものがあります。私は、角度のあるプロジェクトでngReduxを使用しています。私は@Selectデコレータを使用してストアのこのチャンクを取得し、観察を購読している場合Redux +状態アウトサイダー減速機+角度を修正

export interface IState { 
    myVar: any 
} 

export const INITIAL_STATE: IState { 
    myVar: { 
     value1: 0, 
     value2: true 
    } 
} 

:に私を停止している何

@select('myVar') myVar$; 

ngOnInit() { 
    myVar$.subscribe((myvar) => { 
     console.log("myVar changed") 
    }) 
} 

レッツは、私のような店舗を持っていると言いますそれをする:

@select('myVar') myVar$; 

ngOnInit() { 
    myVar$.subscribe((myvar) => { 
     myvar.value2 = false; // <= This Modify the state 
    }) 
} 

私はそれを決してするべきではない、とこれは単なる例の目的だが、そこにあるこれが行われないようにするにはどうしたらいいですか? ngReduxにreadonly myVarなどを返すように指示するかもしれません。より複雑な例では、そのようなストアを使いこなすのは簡単だからです。

私の実際の問題:そのすべてが参照されているので

public class AnotherClass { 

    protected value1: number; 
    protected value2: boolean; 

    constructor(obj: any) { 
     this.value1 = obj.value1; 
     this.value2 = obj.value2; 
    } 
} 

public class MyVarWrapper: extends AnotherClass { 

    constructor(myvar: any) { 
     super(myvar); 

     this.value2 = false; // <= [1] Modifying value2 
    } 
} 

@select('myVar') myVar$; 

ngOnInit() { 
    myVar$.subscribe((myvar) => { 
     let wrapper = new MyVarWrapper(myvar); // <= [2] Because of [1] modify the state 
    }); 
} 

、ストアが変更され、私はここで台無しにすることを私に言ってIDEのコンパイラをしたいと思います。 それ以上に、私はこのvarのコピーを返すので、私の状態を変更するリスクを冒さずに使用したり変更したりすることができます。

答えて

関連する問題