首页 > 其他分享 >Vue3学习日记 Day3 —— Pinia的介绍及使用

Vue3学习日记 Day3 —— Pinia的介绍及使用

时间:2024-03-18 10:58:25浏览次数:22  
标签:count const Pinia defineStore Day3 pinia Vue3 import store

一、Pinia

1、介绍


	1、介绍
	    Pinia是Vue最新的状态管理工具,是Vuex的替代品
	2、变化
	    2.1、去掉了modules和mutation,每一个store都是一个独立的模块
	    2.2、actions即可提供异步,又可提供同步,且可直接修改state数据
	    2.3、提供更加符合、组合式风格的API
	    

2、使用


	1、安装
	    1.1、npm create vue@latest | 创建一个空的Vue3项目
	    1.2、yarn add pinia 或 npm install pinia | 安装pinia
	    1.3、在main.js中导入pinia
	        import { createApp } from 'vue'
	        import { createPinia } from 'pinia'
	        import App from './App.vue'
	        
	        const pinia = createPinia()
	        const app = createApp(App)
	        
	        app.use(pinia)
	        app.mount('#app')    
	        
	2、使用
	    2.1、定义Store
	        2.1.1、在src下创建store文件夹,用于存放模块
	        2.1.2、在模块中导入defineStore
	        2.1.3、示范
	            //@/store/counter.js
	            import { defineStore } from "pinia";
	            import { ref } from "vue";
	            
	            // 定义store
	            // defineStore(仓库唯一标识 ,() => {...})
	            //定义变量名,以便于调用
	            //export用于导出
	            export const useCounterStore = defineStore('counter',() =>{
	            
	                //声明数据 state - count
	                const count = ref(0)
	
	                //声明操作数据的方法 action (普通函数)
	                const addCount = () => count.value++
	                const downCount = () => count.value--
	            
	                //声明基于数据派生的计算属性 getters (computed)
	                const double = computed(() => count.value * 2)
	            
	                return {
	                    count
	                }
	            })
	            

3、仓库解构


	1、问题
	    当仓库导入时想要以解构直接获取数据,会导致响应式丢失
	    
	2、原因
	    因为解构的赋值,相当于创建了一个新的属性,并给其赋值,所以会丢失响应性
	    
	3、解决方法
	    使用 storeToRefs(仓库)
	    如:const {name, Count} = storeToRefs(store)
	
	4、注
	    只有属性需要使用storeToRefs,方法则不需要
	    

4、Pinia持久化

https://prazdevs.github.io/pinia-plugin-persistedstate/


	1、使用流程
	    1.1、安装插件pinia-plugin-persistedstate
	        npm i pinia-plugin-persistedstate
	            或
	        yarn add pinia-plugin-persistedstate
	        
	    1.2、将插件添加到pinia实例上
	        main.js
	        
	            import { createPinia } from 'pinia'
	            import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
	            
	            const pinia = createPinia()
	            pinia.use(piniaPluginPersistedstate)
	            
	    1.3、用法
	        创建Store时,将persist选项设置为true
	        如:
	        export const useCounterStore = defineStore('counter',() =>{
	            const changeList = ref([])
	            return {
	                changeList,
	            }
	        },{
	            persist:true 
	            //开启模块的持久化
	        })
	
	2、配置
	    2.1、默认配置
	        · 使用 localStorage 进行存储
	        · store.$id 作为 storage 默认的 key
	        · 使用 JSON.stringifyJSON.parse 进行序列化/反序列化
	        · 整个 state 默认将被持久化
	        
	    2.2、修改默认配置
	        //若想修改默认配置,可以将一个对象传递给STore的persist属性来配置持久化
	        如:
	            import { defineStore } from 'pinia'
	            
	            export const useStore = defineStore('main', {
	              state: () => ({
	                someState: '你好 pinia',
	              }),
	              persist: {
	                // 在这里进行自定义配置
	              },
	            })        
	    2.3、配置项解析
	        2.3.1、key
	               //用于指定key
	               type:string
	               default:store.$id
	               //使用方式
	               key:'my-key'
	               
	        2.3.2、paths
	               //用于指定需要持久化的数据
	               type:string[]
	               default:undefined
	               //使用方式
	               paths:['count','save.me']
	               

标签:count,const,Pinia,defineStore,Day3,pinia,Vue3,import,store
From: https://blog.csdn.net/Lin_Zhong_/article/details/136779579

相关文章

  • Vue3之Composables
    前言Composables 称之为可组合项,熟悉 react 的同学喜欢称之为 hooks ,由于可组合项的存在,Vue3 中的组件之间共享状态比以往任何时候都更容易。这种新范例引入了一种更有组织性和可扩展性的方式来管理整个应用程序的状态和逻辑。什么是Composables本质上,可组合项是一种模式......
  • vue3+ts+vant写移动端项目部Android机页面打开空白
    前言部分安卓机因为内置webview较老,所以无法识别最新的es6的语法,页面打开空白。解决方式,vite项目就使用@vitejs/plugin-legacy,其他项目可以选择使用@babel/core@babel/cli@babel/preset-env这里主要提vite项目,因为babel项目的相关博客较多,就不再复述。 vite.config......
  • 【WEEK3】 【DAY3】JSON交互处理第二部分【中文版】
    2024.3.13Wednesday接上文【WEEK3】【DAY2】JSON交互处理第一部分【中文版】目录6.4.代码优化6.4.1.乱码统一解决6.4.2.返回JSON字符串统一解决6.5.测试集合输出6.5.1.在UserController.java中添加一个新方法json26.5.2.运行6.6.输出时间对象6.6.1.在UserControlle......
  • Vue — Vue3.0快速掌握
    一.使用create-vue创建项目1.环境条件node版本在16.0以上2.创建vue3.0应用npminitvue@latest//创建npminstall//下载依赖3.项目目录和关键文件1.vite.config.js:项目的配置文件基于vite的配置2.package.接送:项目包文件核心依赖变成了Vue3.X和vite3.main.js:入......
  • 【前端Vue】Vue3+Pinia小兔鲜电商项目第1篇:认识Vue3,1. Vue3组合式API体验【附代码文
    全套笔记资料代码移步:前往gitee仓库查看感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~全套教程部分目录:部分文件图片:认识Vue31.Vue3组合式API体验通过Counter案例体验Vue3新引入的组合式API<script>exportdefault{data(){return{count:0......
  • Vue3 组件通信方式小结
    也是零零散散用vue3来搞一些前端的页面,每次在组件通信,主要是传数据这块总是忘记,大多无非父传子,子传父等情况,这里再来做一个小结.父传子Props最常见的就是父组件给子组件传递数据,不论是传字符串也好,还是数组,对象,函数等,都可以通过属性传值的方式,子组件......
  • Vue3学习日记 Day1
    一、简介1、简介  Vue3是新的默认版本,拥有更快的速度,更好的语法二、使用create-vue搭建Vue3项目1、创建项目1、介绍  create-vue是Vue官方新的脚手架工具,底层切换为了vite,为开发提供极速响应2、使用  2.1、确定环境条件    2.1.1已安装16.0或......
  • 第一个Vue3程序
     上一个作品是Vue2的代码,这个是Vue3,引入时候不一样<!DOCTYPEhtml><html><head><title>Vue.js示例</title><!--引入Vue.js--><scriptsrc="https://unpkg.com/vue@3/dist/vue.global.js"></script></head>......
  • Leecode Day3
    初始想法也是用双指针,问题在于没有灵活运用与运算(实现求和后结果满足二进制表达形式),未设置加位!(add);多了索引位置i,只需要指针i和j。当前位为空。错误代码如下:学习画图小匠的代码:https://leetcode.cn/problems/add-binary/solutions/2652640/javapython3cwei-yun-suan-s......
  • Vue3-03_组件基础_上
    单页面应用程序什么是单页面应用程序单页面应用程序(英文名:SinglePageApplication)简称SPA,顾名思义,指的是一个Web网站中只有唯一的一个HTML页面,所有的功能与交互都在这唯一的一个页面内完成。单页面应用程序的特点单页面应用程序将所有的功能局限于一个web页面中,仅在......