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

可对状态进行管理

相关推荐
蜗牛快跑2132 分钟前
面向对象编程 vs 函数式编程
前端·函数式编程·面向对象编程
Dread_lxy3 分钟前
vue 依赖注入(Provide、Inject )和混入(mixins)
前端·javascript·vue.js
涔溪1 小时前
Ecmascript(ES)标准
前端·elasticsearch·ecmascript
榴莲千丞1 小时前
第8章利用CSS制作导航菜单
前端·css
奔跑草-1 小时前
【前端】深入浅出 - TypeScript 的详细讲解
前端·javascript·react.js·typescript
羡与1 小时前
echarts-gl 3D柱状图配置
前端·javascript·echarts
guokanglun1 小时前
CSS样式实现3D效果
前端·css·3d
咔咔库奇1 小时前
ES6进阶知识一
前端·ecmascript·es6
渗透测试老鸟-九青2 小时前
通过投毒Bingbot索引挖掘必应中的存储型XSS
服务器·前端·javascript·安全·web安全·缓存·xss
龙猫蓝图2 小时前
vue el-date-picker 日期选择器禁用失效问题
前端·javascript·vue.js