位置: IT常识 - 正文

vue下一代状态管理Pinia.js 保证你看的明明白白!(vue状态机)

编辑:rootadmin
1.pinia的简单介绍 Pinia最初是在2019年11月左右重新设计使用Composition API的 Vue 商店外观的实验。 从那时起,最初的原则相同,但 Pinia 适用于 Vue 2 和 Vue 3 。 并且不需要你使用组合 API。 除了安装和SSR之外,还有其他的 API是一样的。 ... 1.pinia的简单介绍Pinia最初是在2019年11月左右重新设计使用Composition API的 Vue 商店外观的实验。从那时起,最初的原则相同,但 Pinia 适用于 Vue 2 和 Vue 3 。并且不需要你使用组合 API。除了安装和SSR之外,还有其他的 API是一样的。并且这些针对 Vue 3 ,并在必要时提供 Vue 2 的相关注释。以便 Vue 2 和 Vue 3 的用户可以阅读!2.为什么要使用Pina?Pinia 是 Vue 的存储库,允许您跨组件/页面共享状态。如果您的组合 API,您可能会认为您可以使用简单的export const state = reactive({})这对于单页应用程序来说是正确的,但如果它是服务器端的外观,将您的应用程序显示给安全漏洞。但即使在小型单页应用程序中,您也可以从使用 Pinia 中获得好处:1.开发工具支持2.动作、追踪的跟踪3.热模块更换4.为 JS 用户提供适当功能的 TypeScript 支持或自动完成5.服务器端渲染支持安装npm install pinia --save3.创建文件夹和文件-存放数据在新建 src/store目录并在其下面创建 index.ts文件,并导出这个文件// src/store/index.ts下的代码import { createPinia } from 'pinia'const store = createPinia()export default store在 main.ts 中引入import { createApp } from 'vue'import App from './App.vue'import router from './router/index'<!-- 引入 -->import store from "./store/index"<!-- 使用store -->createApp(App).use(router).use(store).mount('#app')需求描述假设我们现在有好几个模块。有user模块。admin模块。我们想对这模块中的数据进行管理。为了管理方便,后面易于维护。我们决定将这些模块进行拆分。于是我们在store下创建 user.ts 文件,管理这个user模块的数据。user.ts下的数据//src/store/user.ts 文件import { defineStore } from 'pinia'export const useUserStore = defineStore({ id: 'userkey', // id必填,且需要唯一 // state是存放数据的 state: () => { return { name: '于途', likelist:[], sex:'男', work:'写代码', heigt:'1.70cm' } },})defineStore的介绍defineStore 接收两个参数.第一个参数:必须是唯一的,多个模块千万千万不能重名。因为Pinia 会把所有的模块都挂载到根容器上第二个参数是一个对象,里面的选项state和 Vuex 差不多4.获取store中值的第一种方法<template> <div class="pinia"> <h2> 学习pinia </h2> <div> {{ userStore }} </div> <div>姓名:{{ userStore.name }}</div> <div>性别:{{ userStore.sex }}</div> <div>工作:{{ userStore.work }}</div> <div>身高:{{ userStore.heigt }}</div> </div></template><script setup lang='ts'>// 引入store中暴露出去的方法import { useUserStore } from '../../store/user'const userStore = useUserStore()</script>

推荐整理分享vue下一代状态管理Pinia.js 保证你看的明明白白!(vue状态机),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue中的状态管理,vue状态管理相关的面试题,vue状态码,vue状态管理相关的面试题,vue的状态改变方式,vue中的状态管理,vue中的状态管理,vue3状态管理,内容如对您有帮助,希望把文章链接给更多的朋友!

获取store中值的第二种方法-computed<template> <div class="pinia"> <h2> 学习pinia </h2> <div>姓名:{{useStoreName}}</div> <div>性别:{{useStoreSex}}</div> </div></template><script setup lang='ts'>// 引入store中暴露出去的方法import { computed } from 'vue'import { useUserStore } from '../../store/user'const userStore = useUserStore()// 使用 computed取获取值const useStoreName = computed(() => userStore.name)const useStoreSex = computed(() => userStore.sex)</script>

提出问题如果对象上有多个属性,可以进行结构吗?可以的!使用 pinia 提供的 storeToRefs我们来看下怎去使用5.pinia 提供的 storeToRefs进行结构<template> <div class="pinia"> <h2> 学习pinia </h2> <div>姓名:{{ asName }}</div> <div>性别:{{ mysex }}</div> <div>工作:{{ work }}</div> <div>身高:{{ heigt }}</div> </div></template><script setup lang='ts'>import { storeToRefs } from 'pinia'import { useUserStore } from '../../store/user'const userStore = useUserStore()// asName 和 mysex 是我取的别名const { name : asName ,sex:mysex, work, heigt } = storeToRefs(userStore)</script>vue下一代状态管理Pinia.js 保证你看的明明白白!(vue状态机)

6.如何修改 state 中的数据修改 state 中的数据,可以通过 actions 下的方法。然后调用 updataName 就可以取修改 state中的name值了//src/store/user.ts 文件import { defineStore } from 'pinia'export const useUserStore = defineStore({ id: 'userkey', // id必填,且需要唯一 // state是存放数据的 state: () => { return { name: '于途', likelist:[], sex:'男', work:'写代码', heigt:'1.70cm' } }, // actions 可以修改state中的值,这里面提供方法 actions:{ // 修改name中的数据 updataName(name:string){ this.name=name }, },})调用方法,修改state中的name<template> <div class="pinia"> <h2> 学习pinia </h2> <div>姓名:{{ asName }}</div> <div>性别:{{ mysex }}</div> <div>工作:{{ work }}</div> <div>身高:{{ heigt }}</div> <el-button type="primary" @click="changeHander">修改name</el-button> </div></template><script setup lang='ts'>import { storeToRefs } from 'pinia'import { useUserStore } from '../../store/user'const userStore = useUserStore()// asName 和 mysex 是我取的别名const { name : asName ,sex:mysex, work, heigt } = storeToRefs(userStore)const changeHander=()=>{ userStore.updataName('小玉兔') // 这样我发现也可以,但是不推荐这样使用。 // 统一通过 actions 中的方法去修改值 userStore.work='我换工作了'}</script>

7.getters的使用//src/store/user.ts 文件import { defineStore } from 'pinia'export const useUserStore = defineStore({ id: 'userkey', // id必填,且需要唯一 // state是存放数据的 state: () => { return { name: '于途', likelist:[], sex:'男', work:'写代码', heigt:'1.70cm', age:26, } }, // actions 可以修改state中的值,这里面提供方法 actions:{ // 修改name中的数据 updataName(name:string){ this.name=name }, }, // Getter 完全等同于 Store 状态的计算值 getters:{ // 将姓名进行更改 getName: (state) => { return state.name + 'hahha~!' } }})//使用的页面.vue<template> <div class="pinia"> <h2> 学习pinia </h2> <div>姓名:{{ asName }}</div> <div>性别:{{ mysex }}</div> <div>工作:{{ work }}</div> <div>身高:{{ heigt }}</div> <div>身高:{{ age }}</div> <!-- 这里就直接使用了getters中的方法 --> 姓名:{{ userStore.getName }} <el-button type="primary" @click="changeHander">修改name</el-button> </div></template><script setup lang='ts'>import { storeToRefs } from 'pinia'import { useUserStore } from '../../store/user'const userStore = useUserStore()// asName 和 mysex 是我取的别名const { name : asName ,sex:mysex, work, heigt,age } = storeToRefs(userStore)const changeHander=()=>{ userStore.updataName('小玉兔')}</script>

对于getters的使用的说明Getter 完全等同于 Store 状态的计算值 computed.并不会影响原始数据9.异步actions-设置state中的值//src/store/user.ts 文件import { defineStore } from 'pinia'// 引入接口import { getUser } from "../https/api";export const useUserStore = defineStore({ id: 'userkey', // id必填,且需要唯一 // state是存放数据的 state: () => { return { name: '于途', likelist:[], } }, // actions 可以修改state中的值,这里面提供方法 actions:{ // 修改name中的数据 同步 updataName(name:string){ this.name=name }, // 异步-获取远端的数据 loadUserList(){ getUser({}).then(res=>{ this.likelist = res }) } // 使用await和async 第二种方法 // async loadUserList(){ // const list = await getUser({}) // console.log('list',list) // this.likelist = list // } },})使用的页面<template> <div class="pinia"> <h2> 学习pinia </h2> 数据 {{ userStore.likelist}} <el-button type="primary" @click="changeHander">获取远端数据</el-button> </div></template><script setup lang='ts'>import { storeToRefs } from 'pinia'import { useUserStore } from '../../store/user'const userStore = useUserStore()const changeHander=()=>{ // 异步调用 userStore.loadUserList() // 加载所有数据}

10.actions 中互相调用方法很多时候,我们可能会出现 actions中互相去调用方法。这个时候怎么去处理呢? 通过this.方法名(参数)//src/store/user.ts 文件import { defineStore } from 'pinia'// 引入接口import { getUser } from "../https/api";export const useUserStore = defineStore({ id: 'userkey', // id必填,且需要唯一 // state是存放数据的 state: () => { return { name: '于途', likelist:[], } }, // actions 可以修改state中的值,这里面提供方法 actions:{ // 修改name中的数据 同步 updataName(name:string){ this.name=name }, // 异步-获取远端的数据 loadUserList(){ getUser({}).then(res=>{ this.likelist = res this.sayHi('互相调用方法') }) }, sayHi(mess:string){ console.log('loadUserList方法中调用了sayHi',mess) } },})使用的页面.vue<template> <div class="pinia"> <h2> 学习pinia </h2> 数据 {{ userStore.likelist}} <el-button type="primary" @click="changeHander">获取远端数据</el-button> </div></template><script setup lang='ts'>import { storeToRefs } from 'pinia'import { useUserStore } from '../../store/user'const userStore = useUserStore()const changeHander=()=>{ // 异步调用 userStore.loadUserList() // 加载所有数据}</script>

11.数据持久化-sessionStorage 或 localStorage我们都知道,vuex刷新后,数据会丢失。这个时候我们需要将数据进行持久化。我们可以考虑sessionStorage或者localStorage//src/store/user.ts 文件import { defineStore } from 'pinia'// 引入接口import { getUser } from "../https/api";export const useUserStore = defineStore({ id: 'userkey', // id必填,且需要唯一 // state是存放数据的 state: () => { return { // 数据持久化使用的是sessionStorage name: sessionStorage.getItem('name') ? sessionStorage.getItem('name') : '于途', likelist:[], } }, actions:{ // 修改name中的数据 同步 updataName(name:string){ sessionStorage.setItem('name', name) this.name=name }, },})<template> <div class="pinia"> <h2> 学习pinia </h2> 姓名 {{ userStore.name}} <el-button type="primary" @click="changeHander">该变值</el-button> </div></template><script setup lang='ts'>import { storeToRefs } from 'pinia'import { useUserStore } from '../../store/user'const userStore = useUserStore()const changeHander=()=>{ // 异步调用 userStore.updataName('我改变了姓名') }</script>

12.跨模块修改数据虽然我不建议跨模块修改数据。因为这样可能会导致你的应用数据流向变得难以理解。但是有些时候确实需要跨模块修改数据。那么pinia怎么去处理跨模块修数据呢?下面我们一起来探索跨模块修改数据!假设admin模块需要去修改user模块中的数据admin.ts代码如下//src/store/admin.ts 文件import { defineStore } from 'pinia'// 引入user模块import { useUserStore } from './user'export const adminUserStore = defineStore({ id: 'adminkey', actions:{ // 通过引入的useUserStore模块,然后去触发它里面对应的方法。 editUserModuleValue(name:string){ // userStore可以看见整个user模块中的数据和方法 let userStore=useUserStore() console.log('userStore',userStore) userStore.updataName(name) } },})user.ts代码//src/store/user.ts 文件import { defineStore } from 'pinia'// 引入接口export const useUserStore = defineStore({ id: 'userkey', // id必填,且需要唯一 // state是存放数据的 state: () => { return { name: '于途', likelist:[], sex:'男', work:'写代码', heigt:'1.70cm' } }, actions:{ // 修改name中的数据 同步 updataName(name:string){ this.name=name }, },})页面的使用<template> <div class="pinia"> <h2> 学习pinia </h2> 姓名 {{ userStore.name}} <el-button type="primary" @click="changeHander">该变值</el-button> </div></template><script setup lang='ts'>import { storeToRefs } from 'pinia'// 引入admin模块import { adminUserStore } from '../../store/admin'// 引入user模块import { useUserStore } from '../../store/user'const adminStore = adminUserStore()const userStore = useUserStore()// dmin模块需要去修改user模块中的数据const changeHander=()=>{ adminStore.editUserModuleValue('数据数据')}</script>

尾声如果你觉得我写的不错的话,可以给我推荐、打赏、评论!上一个给我打赏的小伙伴都已经找到女朋友了!咦!你不信,不信你给我打赏看一下!保准你追到到喜欢的Ta!你不会追,哎!难受。我教你,你可以这样说:小生不才,斗胆-问,不知姑娘是否心系他人。感情之事,在下不敢儿戏!如若姑娘早已心系他人。那在下便不再打扰。如若有所唐突还望姑娘多加体谅!若姑娘非我良人,那在下就不庸人自恼。在下怕越陷越深,还望姑娘尽早告知!话已至此,我便先在此谢过!拿去不谢!回头告诉我结果啊!咦!抓住一个没有打赏的小伙伴!
本文链接地址:https://www.jiuchutong.com/zhishi/304530.html 转载请保留说明!

上一篇:PHPCMS各种注入漏洞补丁(php 注入)

下一篇:vue大型电商项目尚品汇(前台篇)day02(vue大型项目架构设计)

  • oppo手机怎么开高帧率(oppo手机怎么开空调步骤)

    oppo手机怎么开高帧率(oppo手机怎么开空调步骤)

  • oppo手机锁屏时间怎么调位置(oppo手机锁屏时来消息怎么不亮屏)

    oppo手机锁屏时间怎么调位置(oppo手机锁屏时来消息怎么不亮屏)

  • 苹果wifi扫一扫在哪里扫(苹果wifi扫一扫在哪里打开)

    苹果wifi扫一扫在哪里扫(苹果wifi扫一扫在哪里打开)

  • cad线宽怎么显示(2020cad线宽怎么显示)

    cad线宽怎么显示(2020cad线宽怎么显示)

  • ios13qq闪退(iosqq闪退怎么解决)

    ios13qq闪退(iosqq闪退怎么解决)

  • 抖音注销一个星期了怎么还在(抖音注销一个星期了可以重新注册了吗)

    抖音注销一个星期了怎么还在(抖音注销一个星期了可以重新注册了吗)

  • 如何交换两张幻灯片的位置(如何交换两张幻灯片背景)

    如何交换两张幻灯片的位置(如何交换两张幻灯片背景)

  • uu加速器手机电脑通用吗(uu加速器手机电脑)

    uu加速器手机电脑通用吗(uu加速器手机电脑)

  • 3英寸屏幕多大(1.43英寸屏幕多大)

    3英寸屏幕多大(1.43英寸屏幕多大)

  • 苹果听语音屏幕黑屏(苹果听语音屏幕黑屏解决方法)

    苹果听语音屏幕黑屏(苹果听语音屏幕黑屏解决方法)

  • 登录qq时需要密保手机验证码怎么办(登录qq必须要密保手机号码吗)

    登录qq时需要密保手机验证码怎么办(登录qq必须要密保手机号码吗)

  • 小米手环3和4的表带通用吗(小米手环3和4的上市时间是多少)

    小米手环3和4的表带通用吗(小米手环3和4的上市时间是多少)

  • 怎么知道支付宝好友把我拉黑或删除(怎么知道支付宝对方有没有删除自己)

    怎么知道支付宝好友把我拉黑或删除(怎么知道支付宝对方有没有删除自己)

  • 华为p30有防抖功能吗(华为p30手机的防抖功能在哪)

    华为p30有防抖功能吗(华为p30手机的防抖功能在哪)

  • 苹果x自带无线充电器吗(苹果x自带无线充电功能吗)

    苹果x自带无线充电器吗(苹果x自带无线充电功能吗)

  • 魅族16sPro能遥控空调吗(魅族16遥控器在哪)

    魅族16sPro能遥控空调吗(魅族16遥控器在哪)

  • 手机使用记录怎么删除(手机使用记录怎么查)

    手机使用记录怎么删除(手机使用记录怎么查)

  • 苹果11后面是玻璃的吗(苹果11后面玻璃有印子怎么去除)

    苹果11后面是玻璃的吗(苹果11后面玻璃有印子怎么去除)

  • 键盘的乘在哪(键盘键位乘号在哪)

    键盘的乘在哪(键盘键位乘号在哪)

  • 全民k歌有必要用声卡吗(全民K歌有必要录整首吗)

    全民k歌有必要用声卡吗(全民K歌有必要录整首吗)

  • 追剧大全为啥打不开(追剧大全能投屏吗)

    追剧大全为啥打不开(追剧大全能投屏吗)

  • 小红书如何看完整图片(小红书如何看完整的笔记)

    小红书如何看完整图片(小红书如何看完整的笔记)

  • win10中的通知栏怎样添加或删除图标通知(win10通知栏怎么设置)

    win10中的通知栏怎样添加或删除图标通知(win10通知栏怎么设置)

  • 基本存款账户可以换银行吗?
  • 供暖企业收取的容量热价费怎么计入收入
  • 委托加工物资两种情况例题
  • 支付稿费演出费用怎么算
  • 年底暂估成本有风险吗
  • 零申报企业年报资产总额怎么填
  • 大额存款提前取一部分怎么计息
  • 房地产开发桩基施工方案
  • 建筑行业跨期收入汇算清缴如何调整?
  • 一般纳税人抵扣小规模期间的专票怎么解决
  • 冲减利润怎么做账
  • 委托代销收取手续费账务处理
  • 外购产品赠送他人合法吗
  • 增值税和消费税申报对比不符怎么处理
  • 企业所得税季报和年报的区别
  • 委外技术服务费应归集哪个研发项目
  • 企业应缴的教育费附加税是多少?
  • 补缴企业所得税汇算清缴会计分录怎么做
  • 不征收增值税项目进项税额可以抵扣吗
  • 不开票收入是怎么回事
  • 展会门票入什么科目
  • 个人租赁汽车给公司怎么开发票
  • 小企业执行新会计准则吗
  • 本月暂估成本的会计分录
  • 工资薪金与劳务报酬的区别有哪些
  • 查账补缴的税的账怎么做
  • php如何实现
  • 电脑自动进入睡眠模式黑屏
  • 免抵退税务处理
  • 汽车报废残值收入怎么做账
  • 工程复工程序是什么
  • 出口退税进项发票稽核
  • 井下生产安全知识
  • 奥尔梅克
  • 吃辣第二天长痘痘
  • 企业会计准则条文释义与案例详解
  • vscode安装python3
  • 即插即用系统
  • php 命名空间 通俗易懂
  • 公司发放工作服账务处理
  • 购买电子承兑差额是多少
  • 社保基数是按基本工资还是应发工资
  • 实际缴纳的增值税是什么意思
  • 帝国cms适合建什么站
  • 财政拨款结余的明细科目有哪些
  • 主营业务冲减怎么做账
  • 紫白择日法实例详解
  • 月末半成品也需要结转生产成本
  • 合营企业和联营企业是关联方吗
  • 月收入一万该怎么说
  • mdf和ndf文件
  • 企业缴纳的住房公积金的税率
  • 研发费用形成无形资产的摊销怎么处理
  • 事业单位零余额账户使用流程
  • 收到一张发票摘要怎么填
  • 代开专票作废税已经交了如何做分录?
  • 小规模纳税人应纳增值税额的计算
  • 电脑开机一直显示xp
  • 教你设置陌陌耳返
  • centos 命令大全
  • fedora linux安装教程
  • ssh -i命令
  • 魔方u怎么弄
  • zhudongfangyu.exe是什么进程,可以删除吗
  • centos nis
  • centos7启动卡在界面
  • win10自定义你的设备有什么用
  • win8取消开始界面
  • python如何搭建环境
  • 支持css的浏览器
  • html中链接
  • 字符串拼接join
  • Struts2+jquery.form.js实现图片与文件上传的方法
  • node express 路由
  • ubuntu各种方法卸载软件
  • 人工智能在税务领域应用中的风险与规制
  • 设计合同需要备案吗
  • 天津本田天虹90摩托车库存
  • 深圳国税咨询电话是多少
  • 北京税务迁址流程是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设