Mutations 与 Actions
使用 mutations 和异步 actions 修改状态
Mutations 与 Actions 是 CoddyKit 上的免费 Vue Academy 课时。 这是第 2 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Vue Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Vue Academy 课程共包含 3 节课。
安全地更改 state
在 Vuex 中,您永远不会直接从组件修改 state。相反,所有更改都要经过变更。这条单一且明确的路径让每次状态变化都能在 Vue DevTools 中被追踪和调试。
什么是变更
变更是一个接收当前 state 并修改它的同步函数。变更是唯一允许修改 state 的地方。
mutations: {
increment(state) {
state.count++
}
}变更必须同步执行
变更必须同步运行。如果您将异步代码(例如网络调用)放入变更中,DevTools 就无法追踪 state 实际发生变化的时间,从而破坏时间旅行调试。
提交变更
要运行变更,请在组件中使用 this.$store.commit按名称commit它。
methods: {
add() {
this.$store.commit("increment")
}
}传递负载数据
变更接受一个称为负载数据的额外参数,让您可以将数据传入这次更改。
mutations: {
incrementBy(state, amount) {
state.count += amount
}
}
// commit with payload
this.$store.commit("incrementBy", 5)对象形式的负载数据
需要传递多个值时,请传入对象形式的负载数据。这比按位置传递参数更清晰、更灵活。
mutations: {
setUser(state, payload) {
state.user = { id: payload.id, name: payload.name }
}
}
this.$store.commit("setUser", { id: 1, name: "Ada" })什么是操作?
操作负责处理异步工作和业务逻辑。操作本身不会更改状态,而是提交变更。这样可以将异步代码与实际的状态变更分离开来。
定义操作
操作会接收一个上下文对象。您可以通过它提交变更或访问状态。
actions: {
async fetchUser(context, userId) {
const res = await fetch("/api/users/" + userId)
const data = await res.json()
context.commit("setUser", data)
}
}解构上下文
为简洁起见,直接从上下文中解构出 commit 是一种常见做法。
actions: {
async loadTodos({ commit }) {
commit("setLoading", true)
const res = await fetch("/api/todos")
commit("setTodos", await res.json())
commit("setLoading", false)
}
}分发操作
组件通过 this.$store.dispatch 触发操作,并可传入有效载荷。分发异步操作会返回一个 promise。
methods: {
async load() {
await this.$store.dispatch("loadTodos")
}
}完整流程
完整流程是:组件分发一个操作,操作执行异步工作并提交一个变更,变更再更改状态。随后,响应式状态会自动更新界面。
快速检查
测试您对变更和操作的理解。
回顾
状态只能通过变更来修改,变更是同步的,并使用 commit 提交。异步逻辑位于操作中,通过 dispatch 分发,并在准备就绪后提交变更。两者都接受有效载荷来传递数据。接下来,您将添加获取器,并将存储拆分为模块。
常见问题解答
「Mutations 与 Actions」课时是免费的吗?
是的 — 「Mutations 与 Actions」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Vue Academy 课程的其余内容,请升级到 CoddyKit PRO。 Vue Academy 课程共包含 3 节课。
「Mutations 与 Actions」这节课中我会学到什么?
使用 mutations 和异步 actions 修改状态 你通过在浏览器中直接运行的动手代码来练习 Vue Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Vue Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Vue Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 3 节。
「Mutations 与 Actions」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Vue Academy 课中编写并运行代码吗?
能。每节 Vue Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Vuex 基础
- Mutations 与 Actions
- Getters 与模块