pinia 介绍及使用

pinia介绍

1.pinia的基本介绍

pinia是vue的全局状态管理工具,与vuex使用方式类似,store 是状态和业务逻辑的实体:state 类似组件的data,getters 类似组件的computed,actions类似组件的methods。

2.pinia与vuex 的区别

  1. pinia没有vuex的mutations
  2. pinia没有空间命名模块
  3. 更好支持typeScript

3.pinia的优势

  1. vue2和vue3 都支持
  2. 支持devtools
  3. 模块热更新
  4. 支持使用插件扩展pinia功能
  5. 比vuex更好支持typeScript
  6. 支持服务端渲染

pinia的基本使用

1.安装

  • npm install pinia
  • 创建挂载
javascript 复制代码
import {creatrPinia} from 'pinia'
//创建Pinia实例
const pinia = createPinia()
//挂载到Vue根实例
app.use(pinia)

初始化配置

1. 定义并导出容器

javascript 复制代码
src/store/index.ts
import {defineStore} from 'pinia'

// 参数1:容器的ID,必须唯一,将来Pinia会把所有的容器挂载到跟容器中
// 参数2:options对象
export const useStore = defineStore('main',{
    // 存储全局状态
    state: ()=>{
        return {
            count:0        
        }    
    },
    // 封装计算属性,有缓存
    getters:{},
    // 封装业务逻辑
    actions:{}
})

2. 使用容器中的state

javascript 复制代码
HelloWorld.vue
<div>{{mainStore.count}}</div>
import {useStore} from '../store'
const mainStore = useStore()

解构访问pinia内部数据

pinia 数据不能直接解构赋值

例如const {count} = mainStore; 只能获取初始值,内容不是响应式的,是一次性的

如何解构赋值

引入方法 storeToRefs

javascript 复制代码
import {storeToRefs} from 'pinia'
const {count} = storeToRefs(mainStore)

状态更新和Actions

1.直接修改

mainStore.count++

2.批量修改(性能优化,批量更新)
javascript 复制代码
mainStore.$patch({
  count: mainStore.count+1,
  arr:[...mainStore.arr ,  4]
})
3.更好的批量更新方式
javascript 复制代码
mainStore.$patch(state=>{
	state.count++
	state.arr.push(4)
})
4.通过actions,封装业务逻辑,修改state
javascript 复制代码
actions: {
    changeState(num:number) {
        this.count+=num    
    }
}

Getters使用

类似于组件的conputed

javascript 复制代码
getters:{
    count10(state) {
        return state.count + 10;    
    }
    如果使用this必须指定返回值类型
    count10 (): number {
        return this.count +10;    
    }
}

pinia和devtools

可对状态进行管理

相关推荐
笨笨饿32 分钟前
#121_图传中的H.364编码与MP4的联系
linux·运维·前端·单片机·嵌入式硬件·面试·职场和发展
默_笙1 小时前
☕ 我给 TS 类型做了台"瘦身手术",还顺手用 Docker 起了个 MySQL
前端·javascript
leoZ2312 小时前
AI+前端提效- 06 AI辅助调试排错:前端报错、白屏、兼容问题极速定位
前端·人工智能·chatgpt·状态模式·超分辨率重建·openvino·dreamfusion
ji_shuke2 小时前
Vue 3 使用 History 哨兵和 popstate 拦截浏览器返回
前端·javascript·vue.js·history·哨兵·popstate
名字还没想好☜3 小时前
Prometheus 告警实战:写 alerting rules、用 Alertmanager 做路由分组与抑制
运维·前端·javascript·docker·kubernetes·prometheus
郭邯3 小时前
从零撸了一个 HTML 实体编解码工具,顺便聊聊我和 AI 结对编程的日常
前端
樊小肆3 小时前
DeepSeeker-Code源码导读12-Hooks四引擎
前端·人工智能·agent
xm_xm_xm_13 小时前
TypeScript 7 个 核心特性
前端·typescript
pppiii3 小时前
前端并发请求控制:5 种实现方案完整梳理
前端
郑州光合科技余经理3 小时前
本地生活平台搭建:统一订单表与多后台切换怎么拆
java·开发语言·前端·系统架构·uni-app·php·ai编程