【Vue3基础】Pinia

246 阅读1分钟

pinia和vuex的区别

(1)pinia它没有mutation,他只有state,getters,action【同步、异步】使用他来修改state数据 (2)pinia他默认也是存入内存中,如果需要使用本地存储,在配置上比vuex麻烦一点

(3)pinia语法上比vuex更容易理解和使用,灵活。 (4)pinia没有modules配置,没一个独立的仓库都是definStore生成出来的

(5)pinia state是一个对象返回一个对象和组件的data是一样的语法

pinia优势:

  • 完整的 TypeScript 支持:与在 Vuex 中添加 TypeScript 相比,添加 TypeScript 更容易 、轻巧(体积约 1KB)

  • main.ts文件

import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
import './style.css'

const app = createApp(App)

// 创建 Pinia实例
const pinia = createPinia()

// 挂载
app.use(pinia)

// storeToRefs 进行解构赋值
app.mount('#app')

store.ts文件

import { defineStore } from "pinia";

export const useMainStore = defineStore('main', {
    state: () => {
        return {
            count: 1000,
        }
    },
    getters: {

    },
    actions: {

    }
})

组件使用

<template>
  <div>
    <button @click="handleVal">{{ mainStore.count }}</button>
  </div>
</template>
<script lang="ts" setup>
import { storeToRefs } from 'pinia';
import { useMainStore } from '../store/index'

const mainStore = useMainStore()
let { count } = storeToRefs(mainStore)
const handleVal = () => {
  // count.value++
  // $patch 批量处理数据
  mainStore.$patch({
    count: count.value + 1
  })
}

</script>