众所周知的是vue2.x中状态管理工具用的是vuex,而vue3中也是可以使用vuex的,且用vue cli 创建的vue3项目里面也是可选vuex是否安装的,或者项目初始化时不安装,如果有需要再进行安装
使用 npm包管理工具是这样的:
npm install vuex@next --save
而用yarn的话是这样的:
yarn add vuex@next --save
下载完依赖包之后就需要创建vuex
首先是从main.js中引入并挂载
import store from './store'
const app = createApp(App)
app.use(store)
然后在src文件夹下创建store文件并创建index.js,并且在index.js中创建一个vuex
import { createStore } from 'vuex'
import persist from 'vuex-persistedstate'
export default createStore({
state: { // 状态,也就是变量
index:0
},
mutations: { // 改变状态,也就是方法,同步的
},
actions: { // 异步改变方法
},
getters:{ // 相当于计算属性
},
modules: { // 模块化
}
})
当然如果你要是用vue cli 直接创建就可以省略以上步骤,vue3中提倡即用即引,如果要在页面使用就要先引入
而且如果项目比较大的情况下,肯定不能把所有要管理的状态都写在一个文件里面,这时候就要做一些模块化的处理
比如创建一个 card.js
export default {
namespaced: true,
state: {
num: 0
},
mutations: {
},
actions: {},
getters: {}
}
然后在导入模块
import card from './card'
modules: {
card
},
使用的话跟上面差不多
import { onMounted, onBeforeMount } from "vue";
import { useStore } from "vuex";
export default {
setup() {
const store = useStore();
console.log(store.state.card.num);
},
};
这是vuex的简单应用
pinia:
使用vue官方创建工具会提示你是否使用pinia,pinia就是vue3中推荐使用的状态管理工具
pinia的安装你如果用 npm init vue@3 的话会有是否安装
或者你可以自己下载
yarn add pinia
// npm
npm install pinia
在main.js 中引入
import { createApp } from 'vue'
import { createPinia } from 'pinia'
const app = createApp(App)
const pinia = createPinia();
app.use(pinia)
同样在src文件夹下创建文件并且创建一个js文件
import { defineStore } from 'pinia'
export const useCounterStore = defineStore({
id: 'counter',
state: () => ({
num:0
}),
getters: {
},
actions: {
handleBtn(){
this.num++
}
})
从这里可以看到差别 vuex有五个核心,pinia只有三个 ,一个是存放状态的也就是变量,一个是计算属性,一个是方法,而且pinia的用法尤为简单
import { useCounterStore } from "@/stores/counter";
const pinia = useCounterStore();
console.log(pinia.num)
如果是方法的话
而且pinia没有模块化,你可以创建很多js文件,一个文件就是一个模块,用哪个文件就引入哪个文件就可以,每个文件都是单独的模块,可以说是相当方便
而且文档中的话,中文文档还没更新有pinia,英文的文档是有的,中文的生态系统里面是vuex,英文就是pinia,
英文文档:Vue.js - The Progressive JavaScript Framework | Vue.js
pinia官网:Pinia
而且github仓库上面,vue3中核心位置也已经没有了vuex,而是换成了pinia