uniapp中pinia(setup语法)使用流程

uniapp中pinia(setup语法)的使用流程

一、安装pinia

bash 复制代码
pnpm install pinia

二、配置pinia并在项目中引入

main.js中配置pinia

javascript 复制代码
import {createSSRApp} from "vue"; //可以创建实例
import pinia from './stores' 
import App from "./App.vue";
export function createApp() {
	const app = createSSRApp(App); // 创建一个vue实例
	app.use(pinia)  //注册pinia(将pinia注入vue实例中)
	return {
		app,
	};
}

三、使用pinia

创建stores文件夹,下方包含index.js和modules文件夹

  • index.js是各个store的入口文件,可以统一导出所有store
  • modules文件夹中存放的是多个独立的pinia store,可以为各个模块创建store存储数据

index.js

javascript 复制代码
import { createPinia } from 'pinia'
import persist from 'pinia-plugin-persistedstate'

// 创建 pinia 实例
const pinia = createPinia()
// 使用持久化存储插件
pinia.use(persist)

// 默认导出,给 main.ts 使用
export default pinia

各个模块的store

javascript 复制代码
import {defineStore} from 'pinia'
import {ref} from 'vue'

export const useUserStore = defineStore('user',
  ()=>{
    // 变量
    const profile = ref({
      token:'',
      userInfo:{},
      introduce:''
    })
    
    // 方法
    const setToken = (token)=>{
      profile.value.token = token
    }
    const setIntroduce = (introduce)=>{
      profile.value.introduce = introduce
    }
    const setProfile = (profileValue)=>{
      profile.value.userInfo = profileValue
    }
    const delProfile = ()=>{
      profile.value = {}
    }
    
    // 必须要返回出去
    return {
      profile,
      setToken,
      setIntroduce,
      setProfile,
      delProfile
    }
  },
  {
    // 持久化 小程序端配置
    persist: {
      storage: {
        getItem(key) {
          return uni.getStorageSync(key)
        },
        setItem(key, value) {
          return uni.setStorageSync(key, value)
        },
      },
    },
  }
)

defineStore函数结构

四、pinia持久化(各个端如何实现)

没有持久化,用户每次打开应用都是 "全新的初始状态";有了持久化,用户的登录状态、购物车、个性化设置才能 "记住",这是绝大多数应用的基础需求。

persist介绍

网页端App端

javascript 复制代码
import {defineStore} from 'pinia'
import {ref} from 'vue'

export const useUserStore = defineStore('user',
  ()=>{
    // 变量
    const profile = ref({
      token:'',
      userInfo:{},
      introduce:''
    })
    
    // 方法
    const setToken = (token)=>{
      profile.value.token = token
    }
    const setIntroduce = (introduce)=>{
      profile.value.introduce = introduce
    }
    const setProfile = (profileValue)=>{
      profile.value.userInfo = profileValue
    }
    const delProfile = ()=>{
      profile.value = {}
    }
    
    // 必须要返回出去
    return {
      profile,
      setToken,
      setIntroduce,
      setProfile,
      delProfile
    }
  },
  {
    // 持久化 小程序端配置
    persist:true
  }
)

微信小程序端

由于persist默认使用的是localStorage,而小程序使用的是getStorageSyncsetStorageSync所以需要重新配置。

javascript 复制代码
import {defineStore} from 'pinia'
import {ref} from 'vue'

export const useUserStore = defineStore('user',
  ()=>{
    // 变量
    const profile = ref({
      token:'',
      userInfo:{},
      introduce:''
    })
    
    // 方法
    const setToken = (token)=>{
      profile.value.token = token
    }
    const setIntroduce = (introduce)=>{
      profile.value.introduce = introduce
    }
    const setProfile = (profileValue)=>{
      profile.value.userInfo = profileValue
    }
    const delProfile = ()=>{
      profile.value = {}
    }
    
    // 必须要返回出去
    return {
      profile,
      setToken,
      setIntroduce,
      setProfile,
      delProfile
    }
  },
  {
    // 持久化 小程序端配置
    persist: {
      storage: {
        getItem(key) {
          return uni.getStorageSync(key)
        },
        setItem(key, value) {
          return uni.setStorageSync(key, value)
        },
      },
    },
  }
)
相关推荐
waves浪游2 小时前
基础开发工具(下)
linux·运维·服务器·开发语言·c++
Hilaku2 小时前
我用AI重构了一段500行的屎山代码,这是我的Prompt和思考过程
前端·javascript·架构
Cxiaomu2 小时前
React Native App 自动检测版本更新完整实现指南
javascript·react native·react.js
QX_hao2 小时前
【Go】--log模块的使用
开发语言·后端·golang
爱编程的鱼2 小时前
ESLint 是什么?
开发语言·网络·人工智能·网络协议
小陈不好吃2 小时前
Spring Boot配置文件加载顺序详解(含Nacos配置中心机制)
java·开发语言·后端·spring
Dan.Qiao2 小时前
python读文件readline和readlines区别和惰性读
开发语言·python·惰性读文件
渡我白衣2 小时前
链接的迷雾:odr、弱符号与静态库的三国杀
android·java·开发语言·c++·人工智能·深度学习·神经网络
A.A呐2 小时前
【QT第三章】常用控件1
开发语言·c++·笔记·qt
Bony-2 小时前
Go语言并发编程完全指南-进阶版
开发语言·后端·golang