Vue3 Pinia 状态管理的数据持久化

之前用 pinia 做左边导航栏菜单,一开始是用localStorage保存数据的,后来想应该有插件做这种数据持久化。所以便找到了localStorage。                                                                        

 1.安装插件

yarn add pinia-plugin-persistedstate

 2.引入插件

import { createPinia } from 'pinia';
//引入持久化插件
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' 

const pinia = createPinia()
//添加持久化支持
pinia.use(piniaPluginPersistedstate);

export default pinia

 3.store中使用

import {defineStore} from 'pinia';

/**
 * 
 * @methods 设置菜单信息
 */
export const useMenuStore = defineStore('menu',{
	persist: true,//数据持久化设置
  state: (): MenuInfoState => ({
	collapse: true,
	menu: {
		id: '',
		name: '',
		title: '',
		path: '/',
		children: [],
		type: 0
	},
  }),
  
  getters:{
	menus(state){
		return state.menu.children;
	},
  },
  actions: {

    async gen(datas:MenuJsonInfo[]) {
	  const that = this;
      const map = {};
	  datas.forEach((item: MenuJsonInfo) =>{
		map[item.id] = {...item, children: [] };
	  });

	  const findParent = (parentId: number, item: MenuJsonInfo)=>{
		  if(parentId == 0 ){
				that.menu.children?.push(map[item.id]);
		  }else {
			  const parent = map[parentId.toString()];
			  if(parent){
				  parent.children.push(item);
			  }
		  }
	  };
	  
	  datas.forEach((item: MenuJsonInfo) =>{
		  findParent(item.parentId, map[item.id]);
	  });

    },
	handleCollape(){
		this.collapse = !this.collapse;
		return this.collapse;
	},
	clear(){
		this.menu.children =[];
	},

  },

  

});

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Oscar_0208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值