不直接引用状态的Vuex突变?

时间:2020-07-22 18:29:40

标签: vue.js vuex

我正在学习Vuex,到目前为止,我的理解是突变应该是简单的函数,可以使用state.property = valuestate.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()更新任务中特定字段的值(例如namedescription),但同样,没有引用状态对象在这里。

我能想到的最好的办法是,它们在调用Vue.set()Array.push()时依靠Vue的本机反应来自动更新状态。但是,如果是这样,在组件内部使用Vue.set()Array.push()也会立即更新状态(违反状态更改应仅在突变内处理的规则吗?

0 个答案:

没有答案