我正在学习Vuex,到目前为止,我的理解是突变应该是简单的函数,可以使用state.property = value
或state.object = {payload}
之类的东西直接更新状态,例如:
SET_USER_DATA (state, userData) {
state.user = userData
}
我正在学习Vue Mastery的一门课程,其中包含的变异看起来像下面的代码,根本没有引用变异体内的state
对象:
CREATE_TASK(state, { tasks, name }) {
tasks.push({ name, id: generateId(), description: "" });
},
UPDATE_TASK(state, { task, field, value }) {
Vue.set(task, field, value);
},
CREATE_TASK
创建一个新的空任务,并使用tasks.push()
将其添加到任务数组,但是更新state
是否不需要引用状态对象?例如。 state.tasks.push()
?简单地将项目推入裸阵列如何将更改提交给状态?
在第二个示例中,他们使用Vue.set()
更新任务中特定字段的值(例如name
,description
),但同样,没有引用状态对象在这里。
我能想到的最好的办法是,它们在调用Vue.set()
或Array.push()
时依靠Vue的本机反应来自动更新状态。但是,如果是这样,在组件内部使用Vue.set()
或Array.push()
也会立即更新状态(违反状态更改应仅在突变内处理的规则吗?>