pinia 快速上手

123 阅读1分钟

安装

yarn add pinia

配置

全局配置

---main.js 
import { createPinia } from "pinia"; 
const pinia = createPinia(); 
app.use(pinia);

局部配置

---store/user.ts
import { defineStore } from "pinia"; 
// 1.定义容器 
// 参数1: 容器的ID,必须唯一,将来pinia会把所有容器挂载到根容器 
// 参数2: 选项对象 
export const userStore = defineStore("user", {   
    /**    
    * 类似于组件的data, 用来存储全局状态    
    * 1. 必须是函数,这样是为了在服务端渲染的时候避免交叉请求导致的数据状态污染   
    * 2. 必须是箭头函数,这样是为了更好的 TS 类型推导    
    * @returns  一个函数,调用得到容器实例    
    */   
    state: () => {     
        return {       
            id: "",     
        };   
    },   
/**    
    * 类似于组件的computed,用来封装计算属性,有缓存的功能    
*/  
getters: {},   
/**    
    * 类似于组件的methods,封装业务逻辑(同步,异步都可以),修改state    
*/   
actions: {     
    login(user: IUser) {       
        // 1、先清空       
        this.$reset();       
        // 2、设置全局token或覆盖掉之前的       
        setLocalStorage("token", user.token);       
        // 3、填充store内容       
        this.setUser(user);     
    },     
    loginOut() {       
        this.$reset();       
        localStorage.clear();     
    },     
    setUser(user: IUser) {       
        this.id = user.id;     
    },   
    }, 
});

使用

页面使用

---login.vue 
import { userStore } from "@/store/user"; 
const useUserStore = userStore(); 
// action和getters可以直接通过.获取使用 
useUserStore.login(user); 
// 清空
state useUserStore.$reset(); 
// 取值 
let id = useUserStore.id; 
// 赋值 
useUserStore.id = "1";

路由使用

router.beforeEach((to, from, next) => { 
    // 注意:需要在这里面申明使用,否则会报错 
    const useUserStore = userStore(); 
})