我对这家vuex商店有疑问
export default {
state: {
resultSet: [
{
name: "result 1"
deep: {
inside: {
isLoading: false
}
}
},
{
name: "result 2"
deep: {
inside: {
isLoading: false
}
}
},
]
},
actions: {
/*
r is an item of the resultSet in the store (so r is a part of the store)
*/
sendQuery(context, r) {
//Here I mutate r directly (it means that I mutated the store directly without commit a mutation)
r.deep.inside.isLoading = true;
//Everything work, the UI is updated along with the state changes, but I'm not sure that
//I'm doing the right thing (mutate the store indirectly without committing a mutation)
}
}
}
问题:
将商店的一部分作为动作的负载分发是正确的吗? =>该动作可能直接更改r的状态。
在上述操作中对r.deep.inside.isLoading=true
进行突变是否正确?
答案 0 :(得分:3)
- 将商店的一部分作为动作的负载分发是否正确? =>该动作可能直接更改r的状态。
状态可以在有效负载中很好。但是动作不能直接修改状态。
- 在上述操作中对
r.deep.inside.isLoading=true
进行突变是否正确?
不。来自docs:
动作不是突变状态,而是突变。
动作只能 commit 突变(类似于Vuex中的“事件总线”和/或互斥体)。
动作(类似于事件本身)分发其他类似事件的东西似乎很愚蠢,但是变异事件(“提交”)具有特殊的规则,例如they must be synchronous,而动作可以执行异步进行突变之前的任务。
在开发过程中利用strict mode的优势,当您错误地修改状态时,Vuex肯定会通知您。