作者:程序员小白条,个人博客
相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!
⭐点赞⭐收藏⭐不迷路!⭐
Vuex 是 Vue.js 官方提供的状态管理库,用于管理 Vue.js 应用中的状态。其原理基于以下核心概念:
state
。这个状态对象是响应式的,当状态发生变化时,相关组件会自动更新。getters
允许组件直接从 store
中获取状态,而不需要将所有的状态都显式地传递给组件。这对于一些需要计算的属性或者筛选操作非常方便。mutations
是改变 state
的唯一途径。每个 mutation
都有一个字符串的事件类型和一个回调函数,该回调函数就是实际进行状态更改的地方。actions
类似于 mutations
,但是它们是异步的,并且可以包含任意异步操作。actions
提交 mutations
来改变状态。它们可以通过 context
对象访问 commit
方法以触发 mutations
。modules
允许将 store
分割成模块,每个模块拥有自己的 state
、getters
、mutations
、actions
,使得大型应用的状态管理更加有序。state
的地方。它是同步的操作,用于同步地修改 state
的状态。mutation
中应该包含简单的逻辑,不应该处理异步操作。mutation
,可以包含异步操作。action
提交 mutation
来改变状态,但 action
可以包含异步操作,例如发起一个请求。action
中通过 context.commit
来触发 mutation
。区别:
store
存储整个应用的状态,通过 action
触发状态变更,通过 reducer
处理状态变更。mutation
修改状态的方式,同时引入了 getter
和 action
的概念。区别:
action
、reducer
等,在 Vuex 中分别对应 mutation
、mutation
。使用状态管理库(如 Vuex 或 Redux)的主要原因包括:
在 Vuex 中,有四种主要属性:
state
的某个值,并进行一些计算或转换后返回一个新的值。state
的状态,每个 mutation 都有一个事件类型和一个回调函数,负责实际修改状态的操作。context.commit
触发 mutation 来改变状态。在一个 Vue.js 应用中,你可以创建一个全局对象来存储应用的状态,但这与使用 Vuex 有以下区别:
Vuex 的 mutation 中不能做异步操作是为了保持状态变更的可追踪性和可预测性。Mutation 是同步的操作,它们的目的是修改状态,并且每个 mutation 都有一个明确的事件类型和一个回调函数,用于实际修改状态。
如果允许在 mutation 中进行异步操作,那么状态变更的顺序就不再可控,多个异步操作可能会相互交织,导致难以预测的状态变更顺序和结果。这会使得应用的状态管理变得复杂,不易调试和维护。
为了处理异步操作,Vuex 提供了 actions,它们可以包含异步逻辑,然后再通过提交 mutation 来修改状态。这样可以保持状态变更的有序性,使状态管理更加可控。
Vuex 的严格模式是一种开发模式,用于检测状态的修改是否来源于 mutation。它的作用是帮助开发者捕捉不合规的状态修改,以便更早地发现问题和调试。
开启 Vuex 的严格模式可以通过在创建 store 时传入一个选项来实现:
const store = new Vuex.Store({
strict: true,
// 其他配置
})
一旦开启严格模式,当一个 mutation 修改状态时,如果不是通过 mutation 函数来修改,而是直接修改 state 的方式,Vuex 将会抛出一个错误,指示状态变更不符合规范。
严格模式有助于检测不当的状态修改,帮助开发者避免潜在的错误。但在生产环境中,建议关闭严格模式以避免性能开销。
在组件中批量使用 Vuex 的 getter 属性可以通过 mapGetters
辅助函数来实现,它可以将多个 getter 映射到组件的计算属性中。以下是如何使用 mapGetters
:
首先,确保在组件中导入 mapGetters
函数和需要映射的 getter:
import { mapGetters } from 'vuex'
然后,在组件的计算属性中使用 mapGetters
:
computed: {
...mapGetters(['getter1', 'getter2', 'getter3'])
}
在上面的示例中,getter1
、getter2
和 getter3
分别是你在 Vuex store 中定义的 getter 名称。一旦映射完成,你就可以像访问普通计算属性一样在组件中使用这些 getter:
this.getter1 // 获取 getter1 的值
this.getter2 // 获取 getter2 的值
this.getter3 // 获取 getter3 的值
这样,你就可以在组件中方便地批量使用 Vuex 的 getter 属性。
开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system
已 300 + Star!
⭐点赞⭐收藏⭐不迷路!⭐