由于反应性导致动作内部 Vuex 数据突变的问题
Problem with Vuex data mutation inside action due to reactivity
我的 Vuex 商店中有一个操作应该调用 API 以更新新数据。
我想创建一个对象,它是我商店中现有值的副本,并可以自由改变它而不受反应性的影响。
现在,当我调用 Array.push()
时,我 运行 遇到了这个错误
Do not mutate vuex store state outside mutation handlers
我该如何做?
(我在 rootState.phone.policy.currentPolicy.attributes.insured.phones
上有一个 getter,我解释了这个错误)。
async [PolicyActionTypes.UPDATE_POLICY](
{ rootState },
payload: UpdatePolicyPayload
) {
const newPolicy: Policy = {
...rootState.phone.policy.currentPolicy,
};
const newPhone: Phone = {
imei: '123',
brand: 'Samsung',
};
newPolicy.attributes.insured.phones.push(newPhone);
// Fake async API call
api.updatePolicy(newPolicy)
},
当你传播时,你正在做一个浅拷贝,因此你仍然引用旧对象。
当你改变对象时,你认为它是一个深拷贝,但它仍然是旧的。
有关我的 的更多信息。
TLDR:cloneDeep
确实是去这里的方法。
我的 Vuex 商店中有一个操作应该调用 API 以更新新数据。
我想创建一个对象,它是我商店中现有值的副本,并可以自由改变它而不受反应性的影响。
现在,当我调用 Array.push()
时,我 运行 遇到了这个错误
Do not mutate vuex store state outside mutation handlers
我该如何做?
(我在 rootState.phone.policy.currentPolicy.attributes.insured.phones
上有一个 getter,我解释了这个错误)。
async [PolicyActionTypes.UPDATE_POLICY](
{ rootState },
payload: UpdatePolicyPayload
) {
const newPolicy: Policy = {
...rootState.phone.policy.currentPolicy,
};
const newPhone: Phone = {
imei: '123',
brand: 'Samsung',
};
newPolicy.attributes.insured.phones.push(newPhone);
// Fake async API call
api.updatePolicy(newPolicy)
},
当你传播时,你正在做一个浅拷贝,因此你仍然引用旧对象。
当你改变对象时,你认为它是一个深拷贝,但它仍然是旧的。
有关我的
TLDR:cloneDeep
确实是去这里的方法。