其他分享
首页 > 其他分享> > pinia 的使用(vue3)

pinia 的使用(vue3)

作者:互联网

pinia 的使用

下载引入 pinia

npm install pinia

// main.ts  (vue3  )

import { createPinia } from 'pinia';
app.use(createPinia());

创建 store>index.ts 文件

import { defineStore } from 'pinia'
// 主要的全局数据 main只是描述信息
export const useMainStore = defineStore('main', {
  // 静态数据
  state: () => {
    return {
      info: "pinia 可以使用",
      count: 10,
    }
  },
  // 相当于计算属性(有数据缓存)
  getters: {
    count10(state) {
      return state.count + 10
    },
    // 若使用this.count,则必须指明返回数据的类型
    count11(): number {
      return this.count + 11
    }
  },
  // actions即可以是同步函数也可以是异步函数
  actions: {
    changeState() {
      this.count += 10
      this.info = "actions修改数据"
    },
    changeStates(num: number) {
      this.count += num + 2
      this.info = "actions修改数据"
    }
  }
})

使用state 和 getters

<template>
  <h1>{{ mainStore.info }}---{{ mainStore.count }}</h1>
  <h1>{{ mainStore.count11 }}</h1>
</template>

<script lang="ts" setup>
import { useMainStore } from "../../store/index";
const mainStore = useMainStore();

</script>

使用 storeToRefs解构赋值

<template>
  <h2>{{ info }}---{{ count }}</h2>
  <h1>{{count11 }}</h1>
</template>

<script lang="ts" setup>
import { useMainStore } from "../../store/index";
import { storeToRefs } from "pinia";
const mainStore = useMainStore();

let { info, count,count11 } = storeToRefs(mainStore);

</script>

actions 的使用方式

<template>
  <h1>{{ mainStore.info }}---{{ mainStore.count }}</h1>
  <h2>{{ info }}---{{ count }}</h2>
  <h1>{{ mainStore.count11 }}{{count11}}</h1>
  <button @click="alertData">批量更新</button>
</template>

<script lang="ts" setup>
import { useMainStore } from "../../store/index";
import { storeToRefs } from "pinia";

const mainStore = useMainStore();

let { info, count } = storeToRefs(mainStore);

const alertData = () => {
  // 方式一:最简单的方法,如下
  // 解构后更改方式
  // count.value += 10;
  // 结构前更改方式
  // mainStore.count += 10;
  // 方式二:若要同时修改多个数据,建议使用$patch来实现批量更新,在内部做了优化
  // mainStore.$patch({
  //   count: mainStore.count + 1,
  //   info: "hello"
  // })
  // 方式三:更好的批量更新方法,通过$patch传递一个函数来实现,这里的state就是useMainStore容器中的state
  mainStore.$patch((state) => {
    state.count += 10;
    state.info = "pinia批量更新";
  });
  // 方式四:通过 actions 来修改数据
  // mainStore.changeState();
  // mainStore.changeStates(10);
};
</script>

标签:count,info,mainStore,vue3,state,pinia,使用,useMainStore
来源: https://blog.csdn.net/chengtiandi/article/details/123257373