vue3中pinia的使用:state和actions

前言

以下代码和内容的使用都是在setup中,未使用TS。

<script setup></script>

内容只涉及最基本的 state 和 actions。getters用法和不同store间的调用,请自行了解。


安装和引入

创建 store

在项目的src文件夹下,创建stores文件夹,新建 homeStore.js文件(名字不重要)。

import { defineStore } from 'pinia';
export const homeStore = defineStore({
  id: 'homeStore',// 项目中 所有store 的唯一 ID。 这里与文件名一致好处是比较方面后期使用。
  state: () => ({
    version: '1.1.0',
    buildDate: '20231011',
  }),
  getters: {},
  actions: {    
    fetchData() {
      // do something
    }
  }
});

注意:actions是允许异步的。可以使用promise或者发起请求。

使用

下面为具体.vue 文件中的使用

<template>
  <section>{{ version }}</section>
</template>

<script setup>
import { watch } from 'vue';
import { storeToRefs } from 'pinia';
import { homeStore } from '@/stores/homeStore';
const HomeStore = homeStore();// 引入 这里使用 大写H的 HomeStore作为当前页面中的使用实例。后续的使用都是该实例
const { fetchData } = HomeStore;
const { version, buildDate } = storeToRefs(HomeStore);
console.log('version: ', version);
console.log('buildDate: ', buildDate);
watch(
  () => version.value,
  (newVersion) => {
    // do something
  }
);
</script>
<style></style>

说明

  1. 代码中的const { fetchData } = HomeStore; 为解构引入了homeStore中的actions。
    后续页面中如果要调用 fetchData 这个action 可以直接调用,如同调用函数一般:fetchData ()
    如果actions 是promise,调用:
fetchData()
  .then((res) => {
    // do something
  })
  .catch((err) => {
    // do something
  });
  1. storeToRefs 方法是 pinia 提供的api:从 store 中提取state 时保持其响应性。
    这样页面在用如代码中version 或者buildDate 时,不仅可以获取到值,也可以对state做赋值操作:
version.value = '1.1.0 (bate)'

赋值之后,所有引用了homeStore 中 version 这个state的地方也会同步变化。
代码后面的watch,也是为了页面监听对应state变化后进行其它操作。

备注

在用使用 const HomeStore = homeStore(); 为页面引入store后。
直接解构引入的是store的actions
storeToRefs 方法引入的是store的 state

参考

pinia 官网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余九月丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值