私は非常に基本的なPerson
クラスを持っており、data
というパラメータが必要です。Object.assignでクラスプロパティを変更するがクラスインスタンスを返す
class Person implements PersonInterface {
constructor(public data) {
}
get name(): string {
return this.data.name;
}
}
const person: PersonInterface = new Person({ name: "Aristona });
私のReduxストアでは、私はすべての人を配列に保ちます。
[Person, Person, Person, Person]
ユーザーはPerson
の名前プロパティを編集できます。だから私の減速は、次のようになります。
case Constants.PERSON_UPDATE_SUCCESS:
const person = Object.assign({}, action.payload.person.data, {
name: action.payload.name
});
return {
...state,
persons: [
person,
...state.persons.filter(p => p.id !== person.id)
]
};
Object.assign
がdata
プロパティを返しますので、それは動作しません。私が必要なのはdata
プロパティが更新されたPerson
オブジェクトです。私はデータを変異させることができれば、それは次のようになります。
person.name = action.payload.name;
をそれ以外の場合は、私人の列は次のようになります。
[Person, Person, Person, Person, Object] // Object is data
、それはすべての反復を破ります。
私はこれをやってみました:
const updatedData = Object.assign({}, action.payload.person.data, {
name: action.payload.name
});
const person: PersonInterface = new Person(updatedData);
理論的にはそれが仕事だろうが、悲しいことに、私は私のPersonFactory
クラスに大きな変更を加えることなく、このようなクラスをインスタンス化することはできません。
Reduxの不変性を損なうことなくこれを達成する方法はありますか?
ありがとうございます。
本当にクラスを使用したい場合は、 'new'を使ってクラスの新しいインスタンスを作成することをお勧めします。 – Sulthan
リアクションと特にレフィックスは、オブジェクト指向ではなく、より機能的なアプローチをとっています。残念ながら、あなたがやろうとしていることをする良い方法は考えられません。私は尋ねる必要があります、あなたは本当にあなたの状態のためのクラスを使用する必要がありますか?状態は単なるデータ構造であり、クラスインスタンスであることから実際に利益を得ることはできません。 – DonovanM
Reduxでのデータのクラスの使用が推奨されない理由についての私の答えを見てください:https://stackoverflow.com/questions/44268317/clone-and-then-mutate-approach-in-redux/44270061#44270061 – markerikson