使用 ngxs 更改 属性 的值
Change the value of a property using ngxs
我有嵌套对象,只想更改嵌套对象中一个 属性 的值。
我尝试过打补丁,immer,但在所有情况下我都不明白为什么不可能。
有时报告 属性 是只读的,有时该对象不可扩展。
使用补丁,我无法做到,因为它需要输入所有对象属性。
而且由于该对象还有其他对象和许多其他属性,我只想更新一个 属性。
显然我做错了什么。
@Action(SetPropertyValueAction)
public setPropertyValueAction(ctx: StateContext<OneStateModel>, { propertyValue }: SetPropertyValueAction) {
// Of course this does not work, but it is to show what I need to happen.
const state = ctx.getState();
const obj = state.obj;
obj.object1.object2.object3.property1 = propertyValue;
ctx.patchState({ obj });
// I would like to do something like that, but I can't.
ctx.patchState({
obj: {
object1: {
object2: {
property1: propertyValue
}
}
}
});
}
问题是该对象具有复杂的结构,我无法报告其所有属性。
obj: {
prop1: number,
prop2: number,
prop3: number,
object1: {
prop1: number,
prop2: number,
object2: {
prop1: number,
prop2: number
}
},
}
当您使用商店模式时,您永远不会修改商店中的任何对象。您需要一个新对象进行更改。使用扩展运算符 ...
使这更容易。
ctx.setState({
...state,
obj: {
...state.obj,
object1: {
...state.obj.object1,
object2: {
...state.obj.object1.object2,
object3: {
...state.obj.object1.object2.object3,
property1: propertyValue,
},
},
},
},
});
我有嵌套对象,只想更改嵌套对象中一个 属性 的值。
我尝试过打补丁,immer,但在所有情况下我都不明白为什么不可能。
有时报告 属性 是只读的,有时该对象不可扩展。
使用补丁,我无法做到,因为它需要输入所有对象属性。
而且由于该对象还有其他对象和许多其他属性,我只想更新一个 属性。
显然我做错了什么。
@Action(SetPropertyValueAction)
public setPropertyValueAction(ctx: StateContext<OneStateModel>, { propertyValue }: SetPropertyValueAction) {
// Of course this does not work, but it is to show what I need to happen.
const state = ctx.getState();
const obj = state.obj;
obj.object1.object2.object3.property1 = propertyValue;
ctx.patchState({ obj });
// I would like to do something like that, but I can't.
ctx.patchState({
obj: {
object1: {
object2: {
property1: propertyValue
}
}
}
});
}
问题是该对象具有复杂的结构,我无法报告其所有属性。
obj: {
prop1: number,
prop2: number,
prop3: number,
object1: {
prop1: number,
prop2: number,
object2: {
prop1: number,
prop2: number
}
},
}
当您使用商店模式时,您永远不会修改商店中的任何对象。您需要一个新对象进行更改。使用扩展运算符 ...
使这更容易。
ctx.setState({
...state,
obj: {
...state.obj,
object1: {
...state.obj.object1,
object2: {
...state.obj.object1.object2,
object3: {
...state.obj.object1.object2.object3,
property1: propertyValue,
},
},
},
},
});