简介

官网:https://pinia.vuejs.org/

类型VueX,但是对比VueX,pinia对TypeScripts支持更好,把mutation去掉了,同时也是Vue3的响应式的。

现在已经加入了Vue团队,成为正式的一员。

使用

1、创建仓库

  1. // 1、引入
  2. import { defineStore } from "pinia"
  3. // 2、创建仓库
  4. export const useMoneyStore = defineStore("layout", {
  5. // 变量
  6. state:()=>{
  7. return {
  8. price:1 as number // 例子:价格,TypeScripts可以在这里用as指定类型
  9. }
  10. },
  11. // 自动更新的变量,类似于vue 的 computed
  12. getters: {
  13. formatPrice: (state) => { return `¥ ${state.price}`}, // 例子:给价格加个¥符号
  14. },
  15. // 方法
  16. actions:{
  17. resetPrice(){ // 例子:重置价格
  18. this.price = 0
  19. },
  20. addPrice(payload:number){ // 例子:重置价格
  21. this.price += payload
  22. }
  23. }
  24. })

2、使用

vue模板内使用

  1. <template>
  2. <div>
  3. <!-- 3、直接使用state、getter -->
  4. <div>价格:{{store.price}}</div>
  5. <div>价格格式化:{{store.formatPrice}}</div>
  6. </div>
  7. </template>
  8. <script lang='ts'>
  9. export default {
  10. inheritAttrs: false,
  11. name: 'yourName'
  12. }
  13. </script>
  14. <script setup lang='ts'>
  15. // 1、引入
  16. import {useMoneyStore} from "@/store/money/index.ts"
  17. // 2、获得引用实例
  18. const store = useMoneyStore()
  19. // 4、使用actions
  20. const reset = store.resetPrice()
  21. </script>
  22. <style lang='less'>
  23. </style>