当前位置: 首页 > news >正文

vue3(笔记)5.0--pinia工具的知识扩展

pinia工具

defineStore(创建pinia)

  • 作用:用于定义一个 Pinia store。

  • 用法

    • 接收一个唯一的 ID 和一个配置对象,配置对象中可以定义 stategetters 和 actions
    • state 是一个函数,返回初始状态。
    • getters 类似于 Vue 组件中的计算属性,用于派生状态。
    • actions 用于修改状态和执行异步操作。

示例代码:

import { defineStore } from 'pinia';

export const useCounterStore = defineStore('counter', {
  state: () => ({
    count: 0,
  }),
  getters: {
    doubleCount: (state) => state.count * 2,
  },
  actions: {
    increment() {
      this.count++;
    },
  },
});

 storeToRefs(响应式数据)

  • 响应式绑定:确保模板中的绑定能够响应 store 状态的变化。
  • 解构便利:允许你解构 store 的状态,同时保持响应式特性。
  • 避免不必要的重新渲染:通过只解构需要的状态,可以减少不必要的重新渲染。

示例代码:

<script setup>
import { useCounterStore } from "@/stores";
import { storeToRefs } from "pinia";  //重点
const counter = useCounterStore();

// tab栏的总数与数据
const { editableTabsValue, editableTabs } = storeToRefs(counter); //重点

// 删除 tab
const removeTab = (e) => {
    counter.removeTab(e);
}
</script>

插件系统

pinia持久化数据可查看上一章节


$subscribe 和 $onAction(监听store数据)

  • $subscribe

    • 作用:允许你订阅 store 的状态变化,并在状态发生变化时触发回调函数。
    • 用法:在 store 实例上调用 $subscribe 方法,传入一个回调函数,回调函数接收两个参数:mutation 和 state
  • $onAction

    • 作用:允许你监听 store 中 actions 的调用,并在 action 调用前后执行逻辑。
    • 用法:在 store 实例上调用 $onAction 方法,传入一个回调函数,回调函数接收一个包含 action 名称、args 参数等信息的对象。

示例代码:

import { useCounterStore } from '@/stores/counter';

export default {
  setup() {
    const store = useCounterStore();

    // 订阅状态变化
    store.$subscribe((mutation, state) => {
      console.log('State changed:', mutation, state);
    });

    // 监听 action 调用
    store.$onAction(({ name, args }) => {
      console.log(`Action ${name} called with args:`, args);
    });

    return {
      store,
    };
  },
};

 与 Vue Router 集成

  • 作用:Pinia 可以与 Vue Router 集成,以便在路由变化时执行特定的逻辑,如加载数据或重置状态。

  • 用法

    • 在路由守卫中访问和修改 Pinia store 的状态。
    • 使用 store 的 actions 在路由变化时执行异步操作。

示例代码:

import { useCounterStore } from '@/stores/counter';
import { onBeforeRouteUpdate } from 'vue-router';

export default {
  setup() {
    const store = useCounterStore();

    onBeforeRouteUpdate((to, from, next) => {
      // 在路由变化时执行逻辑
      store.reset(); // 假设 store 有一个 reset 方法
      next();
    });

    return {
      store,
    };
  },
};

相关文章:

  • 系统工程-信息系统的分类
  • How to use pgbench to test performance for PostgreSQL?
  • 【C++】String类的模拟实现
  • [Qt5] QMetaObject::invokeMethod使用
  • Netty源码—7.ByteBuf原理三
  • 蓝桥云客-染色时间
  • 1424.对角线遍历
  • 322 零钱兑换
  • 【大模型基础_毛玉仁】4.4 低秩适配方法
  • RocketMQ 4.x、5.x 性能对比
  • 绩效考核如何从形式化任务升级为公司战略工具?
  • 2025.3.25
  • 基于CondLaneNet论文和全卷积分割头的车道线head设计
  • QML输入控件: Dial基本用法与样式定制(1)
  • 【机器学习】imagenet2012 数据预处理数据预处理
  • K8S学习之基础五十二:k8s配置jenkins
  • Vite 与 Nuxt 深度对比分析
  • 软件设计模式-第一章
  • 数据源为postgres的多表关联flink开发需求,开发思路
  • jmeter通过json提取器获取接口返回token(超详细)
  • 碧桂园:砸锅卖铁保交房、持续推进保主体,尽快让公司恢复正常经营
  • 墨西哥宣布就“墨西哥湾”更名一事起诉谷歌
  • 保证断电、碰撞等事故中车门系统能够开启!隐藏式门把手将迎来强制性国家标准
  • 外交部回应西班牙未来外交战略:愿与之一道继续深化开放合作
  • 李云泽:支持小微企业、民企融资一揽子政策将从增供给、降成本、提效率、优环境4个方面发力
  • 李云泽:将尽快推出支持小微企业民营企业融资一揽子政策