我有一个非常基本的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
财产。我需要的是Person
对象与data
属性更新。如果我能发生变异的数据,应该是这样的:
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
React,特别是Redux采用更实用的方法而不是面向对象。不幸的是,我无法想出一个很好的方式去做你想做的事情。我必须问,你真的需要为你的国家使用类吗?状态只是一个数据结构,并不会真正从类实例中受益。 – DonovanM
见我为什么使用类在终极版数据气馁答案:https://stackoverflow.com/questions/44268317/clone-and-then-mutate-approach-in-redux/44270061#44270061。 – markerikson