pinia 状态管理

https://uniapp.dcloud.net.cn/tutorial/vue3-pinia.html

demo

user状态管理器
// stores/user.js
import {
    defineStore
} from 'pinia';

// @see : https://pinia.vuejs.org/zh/core-concepts/
// 你可以任意命名 `defineStore()` 的返回值,但最好使用 store 的名字,同时以 `use` 开头且以 `Store` 结尾。
// (比如 `useUserStore`,`useCartStore`,`useProductStore`)
// 第一个参数是你的应用中 Store 的唯一 ID。
export const useUserStore = defineStore('user', {
    state: () => {
        return {
            //是否登录 项目中改为真实登录信息判断,如token
            isLogin: uni.getStorageSync("api_token") ? true : false,
            //登录用户名
            nickname: "请登录xx",
            userinfo: uni.getStorageSync("user_info") || {},
            count : 0,
            ...
        };
    },
    // getters 内函数的默认第一个参数为 state
    getters: {
        double: (state) => state.count * 2,
        currentTime: (state) => {
            return '2024-06-21 17:44:14';
        },
        // 向 getters 传值 `getUserById(2)`
        getUserById: (state) => {
          //  return this.double + 1
          return (userId) => state.users.find((user) => user.id === userId)
        },
    },
    // Action 相当于组件中的 method
    actions: {
        increment() {
            this.count++;
        },
        login(a) {
            console.log('login', a)
        },
    },
});

在组件中调用

import { mapState, mapStores, mapActions, mapGetters } from 'pinia'
import { useUserStore } from '@/stores/user'

 export default {
    computed: {
        // 其他计算属性
        // 允许访问 this.userStore | id 为 "user" 的 store | eg: this.userStore.login(userInfo), this.userStore.nickname
        ...mapStores(useUserStore),
        // 允许读取 this.userinfo,this.nickname,this.currentTime // currentTime 是 useUserStore 里面的 getters
        ...mapState(useUserStore, ['userinfo', 'nickname', 'currentTime']),
        // 允许读取 useUserStore 里面 getters 的方法  | eg:this.currentTime
        ...mapGetters(useUserStore, ['currentTime'])
    },
    methods: {
        // 允许读取 this.login()
        ...mapActions(useUserStore, ['login']),
    }
}