Vuex 和 Pinia 都是 Vue.js 的状态管理库,但它们在设计理念和使用方式上有显著区别。以下是两者的主要差异:
Vuex
state → mutations → actions
)。 mutations
修改状态。 actions
提交 mutations
。Pinia
mutations
,允许直接在 actions
中处理同步和异步逻辑。 Vuex
Pinia
Vuex
modules
划分模块,每个模块需定义 state/mutations/actions/getters
,嵌套结构可能复杂。Pinia
Vuex
state
、mutations
、actions
、getters
,模板代码较多。 // Vuex 示例
const store = {
state: { count: 0 },
mutations: {
increment(state) { state.count++ }
},
actions: {
incrementAsync({ commit }) { commit('increment') }
}
};
Pinia
ref
/reactive
定义状态,合并 mutations
到 actions
。 // Pinia 示例
export const useCounterStore = defineStore('counter', {
state: () => ({ count: 0 }),
actions: {
increment() { this.count++ }, // 同步
async incrementAsync() { this.count++ } // 异步
}
});
Vuex
Pinia
setup()
语法。Vuex
Pinia
Vuex
Pinia