不要在突变处理程序之外改变 vuex 存储状态
Posted
技术标签:
【中文标题】不要在突变处理程序之外改变 vuex 存储状态【英文标题】:do not mutate vuex store state outside mutation handlers 【发布时间】:2020-10-05 05:08:11 【问题描述】:我试图在我的商店中覆盖一个名为 device 的数组中的对象。 突变 saveState 接收一个设备,如果它在设备数组中不存在,它将推送对象,但如果它已经存在,它将用接收到的设备替换它。 我尝试了将近一天的解决方案,但我的代码没有问题。
store.device.js
export const state = () => (
device: []
)
export const mutations =
saveState(state, device)
var index = state.device.findIndex(dev => dev.id == device.id)
index === -1 ? state.device.push(device) : (state.device[index] = device)
export const getters =
getStateById: state => id =>
return state.device.find(dev => dev.id === id)
【问题讨论】:
【参考方案1】:您遇到的问题是,当您像使用 state.device[index] = device
一样直接尝试设置数组索引时,Vue 无法检测到状态变化。
为此,他们提供了 Vue.set,它允许您更新某个索引处的数组。它是这样使用的:
//Vue.set(array, indexOfItem, newValue)
index === -1 ? state.device.push(device) : Vue.set(state.device, index, device);
您可以在文档here 中阅读有关它的信息
【讨论】:
以上是关于不要在突变处理程序之外改变 vuex 存储状态的主要内容,如果未能解决你的问题,请参考以下文章
nuxt vuex:不要在突变处理程序之外改变 vuex 存储状态
错误:[vuex] 不要在突变处理程序之外改变 vuex 存储状态
vuex 错误 - 不要在突变处理程序之外改变 vuex 存储状态