Vue3-47-Pinia-修改全局状态变量值的方式

说明

修改全局状态变量的值,是一个比较常规而且常见的操作。

本文就介绍四种常见的操作。

由于Option StoreSetup Store 在修改的时候略有不同,所以本文也会将不同点体现一下。

全局状态变量的定义

包含了 Option StoreSetup Store 两种定义方式;

在下面的修改操作中会根据这两种不同的定义来分别阐述。

ts 复制代码
// 导入 defineStore API
import { defineStore } from 'pinia'

// 导入 reactive 依赖
import { reactive } from 'vue'

// 定义全局状态方式一 : option store
export const useClassStore = defineStore('classinfo',{

    state: () => ({
        name:'快乐篮球二班',
        studentNum:30
    }),

    actions:{
      // 用来更新状态的值
      updateName(){
        this.name = '使用actions修改的name'
      }
    }


})

// 定义全局状态方式二 : setup store
export const useStudentStore = defineStore('studentinfo',() => {

    // 响应式状态
    const student =  reactive({
        name : '小明',
        age:12,
        className:'快乐足球一班'
    })


    // 直接定义一个方法进行数据属性的修改
    const updateName = (nameP:string)=>{
        student.name = nameP
    }


    return { student,updateName }

})

方式一 : 直接修改

直接修改 : 就是直接读取对象进行变量值的替换。

Option Store

ts 复制代码
	// 导入全局状态变量的定义
    import  { useClassStore }  from './storea'

    // 获取全局状态变量的对象
    const classStore = useClassStore()

    // 方式一 : 直接修改
   classStore.studentNum = 36

Setup Store

ts 复制代码
	// 导入全局状态变量的定义
    import  { useStudentStore }  from './storea'

    // 获取全局状态变量的对象
    const studentStore = useStudentStore()
    
    // 方式一 : 直接修改
    studentStore.student.className = '我也不知道是哪个班的'

方式二 :$patch 方式修改

参数是一个对象的形式

Option Store

直接放入 【参数对象】 : {key:value} 就OK了

ts 复制代码
	// 导入全局状态变量的定义
    import  { useClassStore }  from './storea'

    // 获取全局状态变量的对象
    const classStore = useClassStore()
    
  	// 方式二 : $patch 方法修改
    classStore.$patch({studentNum:20})

Setup Store

由于 状态变量在定义的时候,就是一个响应式对象,所以需要把整个的对象都放进去才OK。

ts 复制代码
	// 导入全局状态变量的定义
    import  { useStudentStore }  from './storea'

    // 获取全局状态变量的对象
    const studentStore = useStudentStore()
    
    // 方式二 : $patch 方法修改
    studentStore.$patch({student:{
            name: studentStore.student.name,
            age: studentStore.student.age,
            className:'又换了一个班级'
    }})

方式三 : $patch 带参数的方式修改

参数是 函数的形式,且函数的参数就是 原state对象

这种方式用起来比【方式二】要更加灵活。

Option Store

ts 复制代码
	// 导入全局状态变量的定义
    import  { useClassStore }  from './storea'

    // 获取全局状态变量的对象
    const classStore = useClassStore()
    
   // 方式三 :$patch + 函数参数的方法修改 : 函数的参数就是 状态对象
   classStore.$patch((state)=>{
           console.log(state)
           state.studentNum = 100
   })

Setup Store

ts 复制代码
	// 导入全局状态变量的定义
    import  { useStudentStore }  from './storea'

    // 获取全局状态变量的对象
    const studentStore = useStudentStore()
    
    // 方式三 :$patch + 函数参数的方法修改 : 函数的参数就是 状态对象
    studentStore.$patch((state)=>{
         console.log(state)
         state.student.className = '超级无敌快乐踢足球的班'
    })

方式四 :actions方法的方式进行修改

这种方式比较好理解,就是通过调用已经定义好的方法的方式来进行变量值的修改。

也比较推荐使用这一种方式。

Option Store

ts 复制代码
	// 导入全局状态变量的定义
    import  { useClassStore }  from './storea'

    // 获取全局状态变量的对象
    const classStore = useClassStore()

 	// 方式四 :actions 方法的方式进行数据的修改
    classStore.updateName()

Setup Store

ts 复制代码
	// 导入全局状态变量的定义
    import  { useStudentStore }  from './storea'

    // 获取全局状态变量的对象
    const studentStore = useStudentStore()

    // 方式四 :actions 方法的方式进行数据的修改
    studentStore.updateName('小红')
相关推荐
RuoyiOffice1 天前
SpringBoot3+Vue3 最推荐的开源 OA 系统 2026:流程驱动、资源闭环、多端互通
spring boot·vue3·flowable·oa·协同办公·spring boot 3·开源oa
鱼与宇2 天前
Element-plus离线访问(适用内网)
elementui·vue3
我就是DaLing呀!5 天前
vue3 + 独立的数据管理 Store实现视频剪辑功能
前端·typescript·vue3·canvas·store
我才是银古7 天前
当 360° 全景遇上真实地图:Vue 3 实现全景-地图双向联动的工程实践
3d·vue3·360影像
XLYcmy9 天前
HTML/CSS/JS 基础与 Vue 技术栈深度解析
java·前端·css·html·vue3·vue2·api
码视野11 天前
基于 Spring Boot + Vue3 的【大学英语四六级 (CET-4/6) 作文智能评分与句式润色系统】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端·vue3
码视野11 天前
基于 Spring Boot + Vue3 的【高校化学实验室安全准入考试与危化品配伍排查系统】设计与实现(含PRD/三端高保真源码/大屏)
前端·人工智能·spring boot·后端·安全·vue3
fxshy12 天前
WebGIS 游戏化实践:基于 Cesium + Vue3 实现全球飞行模拟系统:从球体坐标、飞行动力学到地形碰撞实战
游戏·vue3·cesium·webgis·飞行模拟
jonyleek13 天前
技术实践:基于 Vue3 + Spring Cloud 微服务实现私有化文档系统的类 SaaS 协同体验
微服务·私有化部署·vue3·springcloud·协同编辑·jvs企业文档·无忧企业文档
码视野13 天前
基于 Vue3 + Element Plus 的【智慧社区洗车养车与上门流动洗车预约调度系统】设计与实现(含PRD/三端源码/大屏)
前端·javascript·vue.js·人工智能·vue3