专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

浅析Vue项目中怎么用Pinia状态管理工具

来源:小易整编  作者:小易  发布时间:2024-03-21 07:46
摘要:vue项目中怎么用pinia状态管理工具?下面本篇文章带大家聊聊vue项目中pinia状态管理工具的使用,希望对大家有所帮助!Pinia官网介绍说:Pinia是Vue的存储库,它允许您跨组件/页面共享状态。Vuex同样可以作为状态管理...

vue项目中怎么用pinia状态管理工具?下面本篇文章带大家聊聊vue项目中pinia状态管理工具的使用,希望对大家有所帮助!

浅析Vue项目中怎么用Pinia状态管理工具

Pinia官网介绍说:Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。Vuex同样可以作为状态管理工具,那么两者有什么区别呢?

Pinia与Vuex的区别pinia只有store、getter、actions,么有mutations,简化了状态管理的操作。【相关推荐:vuejs视频教程、web前端开发】pinia模块划分不需要modules,pinia自动化代码拆分pinia对ts支持很好以及vue3的composition APIpinia体积更小,性能更好使用Pinia

defineStore( ) 方法的第一个参数:容器的名字,名字必须唯一,不能重复defineStore( ) 方法的第二个参数:配置对象,放置state,getters,actionsstate 属性: 用来存储全局的状态getters属性: 用来监视或者说是计算状态的变化的,有缓存的功能actions属性: 修改state全局状态数据,可以是异步也可以是同步Pinia可以用于vue2.x也可以用于vue3.x中

安装
yarn add pinia -S
登录后复制main.js引入
import {createApp} from "vue"import App from "./app.vue"import store from "./store/index.js"const app = createApp(App);const store = createPinia();app.use(store).mount("#app")
登录后复制在store文件夹下新建test.js
import {definePinia} from "pinia"export default testStore = definePinia('testId',{    state:()=>{         tname:"test",         tnum:0,    },    getters:{       changeTnum(){           console.log("getters")           this.tnum++;       }    },    actions:{       addNum(val){          this.tnum += val       }    },    //持久化存储配置    presist:{         enable:true,//         strategies:[            {            key:"testId",            storage:localStorage,            paths:['tnum']            }          ]    }})
登录后复制登录后复制

在用actions的时候,不能使用箭头函数,因为箭头函数绑定是外部的this。actions里的this指向当前store

在store文件夹下新建index.js,便于管理
import {createPinia} from "pinia"const store = createPinia();export default store
登录后复制新建A.vue组件,引入store模块和storeToRefs方法storeToRefs:解构store中的数据,使之成为响应式数据
登录后复制
登录后复制直接修改数据的两种方式

直接修改数据与使用$path修改数据相比,官方已经明确表示$patch的方式是经过优化的,会加快修改速度,对程序的性能有很大的好处。所以如果你是多条数据同时更新状态数据,推荐使用$patch方式更新。 虽然可以直接修改,但是出于代码结构来说, 全局的状态管理还是不要直接在各个组件处随意修改状态,应放于actions中统一方法修改(piain没有mutation)。

//直接修改数据tchangeName(){     tname.value = "测试数据";     tnum.value++;}//当然也可以使用`$path`批量修改tchangeName(){     testStore.$path(state=>{          state.tname = "测试数据";          state.value = 7;     })}
登录后复制使用actions修改数据

直接调用actions中的方法,可传参数

const actionsBtn = (){      testStore.addNum(5)  }
登录后复制重置state中数据

store中有$reset方法,可以直接对store中数据重置

const treset = (){    testStore.$reset()}
登录后复制Pinia持久化存储实现持久化存储,需要配合以下插件使用
yarn add  pinia-plugin-persist
登录后复制配置store文件夹下的index.js文件,引入pinia-plugin-presist插件
import {createPinia} from "pinia"import piniaPluginPresist from "pinia-plugin-presist"const store = createPinia();store.use(piniaPluginPresist)export default store
登录后复制配置stroe文件夹下的test.js文件,使用presist属性进行配置
import {definePinia} from "pinia"export default testStore = definePinia('testId',{    state:()=>{         tname:"test",         tnum:0,    },    getters:{       changeTnum(){           console.log("getters")           this.tnum++;       }    },    actions:{       addNum(val){          this.tnum += val       }    },    //持久化存储配置    presist:{         enable:true,//         strategies:[            {            key:"testId",            storage:localStorage,            paths:['tnum']            }          ]    }})
登录后复制登录后复制enable:true,开启持久化存储,默认为使用sessionStorage存储 - strategies,进行更多配置 - key,不设置key时,storage的key为definePinia的第一个属性,设置key值,则自定义storage的属性名 storage:localStorage,设置缓存模式为本地存储paths,不设置时对state中的所用数据进行持久化存执,设置时只针对设置的属性进行持久化存储Pinia模块化实现

模块化实现即在store对要使用的模块新建一个js文件,比如user.js文件。然后配置内容跟其他模块一样,根据自己需求进行设置,然后在对应页面引入。

Pinia中store之间互相调用

比如:test.js获取user.jsstatename属性值,在test.js引入user.js

import { defineStore } from 'pinia'import { userStore } from "./user.js"export const useTest = defineStore("testId", {state: () => {return {tid: "111",tname: "pinia",tnum: 0}},getters: {tchangeNum() {console.log('getters')return this.tnum + 100}},actions: {tupNum(val) {console.log('actions')this.tnum += val;},getUserData() {console.log(useStore().name);return useStore().name;},},persist: {//走的sessionenabled: true,strategies: [{key: "my_testId",storage: localStorage,paths: ['tnum']}]}})
登录后复制

user.js

import { defineStore } from 'pinia'export const useStore = defineStore('storeId', {  state: () => {    return {      num: 0,      name: '张三'    }  }})
登录后复制

A.vue组件中,调用test.jsgetUserData方法就可以得到uesr.js中的name

const actionBtn = () => {    testStore.getUserData()};
登录后复制

(学习视频分享:编程基础视频)

以上就是浅析Vue项目中怎么用Pinia状态管理工具的详细内容,更多请关注易企推科技其它相关文章!


本文地址:网络知识频道 https://www.hkm168.com/jiqiao/1151829.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


网络知识
小编:小易整编
相关文章相关阅读
  • ppt中怎么插入自定义动作按钮

    ppt中怎么插入自定义动作按钮

    ppt插入自定义动作按钮: 打开幻灯片文件,然后在菜单栏中点击插入,打开插入工具栏,之后在插入工具栏中选择形状工具,如下图所示:点击形状工具后,就打开所有预置的形状列表,如下图所示,选择我们需要的形状。选择好形状后,自动退回到ppt文件编辑...

  • 主板显卡卡扣断了怎么办

    主板显卡卡扣断了怎么办

    主板显卡卡扣断了可以尝试使用胶带或胶水将其固定、更换显卡插槽、更换主板或者寻求专业人员的帮助。详细介绍:1、使用胶带或胶水将其固定,使用胶带或胶水时要小心,以免粘到其他部件上;2、更换显卡插槽,建议找专业的电脑维修人员来进行操作;3、更换主...

  • abc类ip地址怎么区分

    abc类ip地址怎么区分

    区分方法:1、a类ip地址,第一段号码为网络号码,剩下的三段号码为本地计算机的号码;2、b类ip地址,前两段号码为网络号码;3、c类ip地址,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。本教程操作环境:windows7系统、De...

  • jsp文件怎么创建

    jsp文件怎么创建

    创建jsp文件的步骤:1、安装和配置java开发环境;2、安装和配置web服务器;3、创建jsp文件;4、编写jsp代码;5、部署和运行应用程序;6、调试和测试。详细介绍:1、安装和配置java开发环境,首先需要在计算机上安装jdk,可以从...

  • win7升级错误代码80072efe该怎么办win7升级错误代码80072efe解决...

    win7升级错误代码80072efe该怎么办win7升级错误代码80072efe解决方案

    win7客户在系统更新的过程中遇到了80072efe的报错,像这种状况要怎么办呢?你先清查网络问题,然后去微软官网下载代理,假如你用的是32位计算机就免费下载32位代理,安装下载完成后马上重启。假如再次出现升级不正确得话,你也就再去官方网站...

  • git怎么合并分支代码

    git怎么合并分支代码

    git合并分支代码的方法:1、使用“gitmerge”命令,该命令用来做分支合并,可以将其他分支中的内容合并到当前分支中。2、使用“gitrebase”命令,该命令用于改变当前的分支的基点,进而实现分支合并。本教程操作环境:Window...

  • 如何使用Vue技术进行移动端开发

    如何使用Vue技术进行移动端开发

    如何使用Vue技术进行移动端开发随着移动互联网的迅猛发展,移动端应用的开发变得越来越重要。Vue.js作为一款轻量级、高性能的前端框架,被广泛应用于移动端开发中。本文将介绍如何使用Vue技术进行移动端开发,并给出具体的代码示例。一、准备工作...

  • ps软件怎么打字

    ps软件怎么打字

    ps软件怎么打字?利用PS软件的文字工具可以进行打字,具体操作请参照以下步骤。1、首先在电脑上打开Photoshop软件,新建一个300x300像素的画布,填充前景色,色值为#38bada,并保存源文件。2、然后点击软件界面左边工具栏中的文...

  • 周排行
  • 月排行
  • 年排行

精彩推荐