• 【Vue全家桶】新一代的状态管理--Pinia


    🦴 什么是 Pinia

    Pinia (西班牙语中的菠萝),本质上依然是一个状态管理的库,用于跨组件、页面进行状态共享.

    pinia 与 vuex 的区别:

    1. 更友好的TypeScript支持,Vuex之前对TS的支持很不友好

    2. 与 Vuex 相比,Pinia 提供了一个更简单的 API,具有更少的仪式,提供了 Composition-API 风格的 API

    3. 不再有modules的嵌套结构

    4. 也不再有命名空间的概念,不需要记住它们的复杂关系

    如何使用 Pinia

    1. 安装 pinia
    yarn add pinia
    
    • 1
    1. 创建一个pinia
    // src/stores/index.js
    import { createPinia } from "pinia";
    
    const pinia = createPinia()
    
    export default pinia
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    //main.js
    import pinia from './stores'
    
    app.use(pinia)
    
    • 1
    • 2
    • 3
    • 4

    🌂认识 Store

    一个 Store (如 Pinia)是一个实体,它会持有为绑定到你组件树的状态和业务逻辑,也就是保存了全局的状态

    这样就可以定义任意数量的Store来管理你的状态,包括 state、getters、actions

    1. 定义一个store

    • Store 是使用 defineStore() 定义的,

    • 且它需要一个唯一名称,作为第一个参数传递

    image-20220812152348346

    2. 使用 store

    image-20220812152432057

    image-20220812154916315

    🧳 操作 State

    state 是 store 的核心部分,store是用来实现我们管理状态的。

    image-20220812163115369

    • 方式一:直接一个个修改state
    • 方式二:一次性修改多个状态
    • 方式三:替换state
    • 方式四:重置state

    image-20220812165009960

    image-20220812165858904

    image-20220812170350560

    image-20220812170540664

    🍨 Getters

    1. 认识和定义 Getters

    Getters相当于Store的计算属性:

    • 可以用 defineStore() 中的 getters 属性定义;
    • getters中可以定义接受一个state作为参数的函数;

    2. 访问 Getters

    • 方式一:访问当前 store 的Getters

    • 方式二:Getters 中访问自己的其他Getters

    • 方式三:访问其他的 store 的Getters

    getters: {
        // 1. 基本使用
        debouleCount(state) {
          return state.count * 2
        },
        // 2. 一个 getters 引入另外一个 getters
        useDebouleCount() {
          return this.debouleCount + 2
        },
        // 3. getter也支持返回一个函数
        getFriendById(state) {
          return function (id) {
            for (let i = 0; i < state.vagetabel.length; i++) {
              const vagetabel = state.vagetabel[i]
              if (vagetabel.id === id) {
                return vagetabel
              }
            }
          }
        },
        // 4.访问其他store中的Getters
        showMessage(state) {
          // 获取user信息
          const useStore = useUser()
    
          // 获取自己的state
          // 拼接信息
          return `name:${useStore.name} - count:${state.count}`
        }
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    image-20220812181122665

    🍳认识和定义 Action

    Action 可以理解成组件中的 methods ,和getters一样,在action中可以通过this访问整个store实例的所有操作。

    image-20220813121159762

    Action 是支持异步操作的,所以可以使用 await。

    image-20220813121241994

    喜欢就一键三连吧!

  • 相关阅读:
    跨链自动化中心 OAK Network,构建安全高效 Web3 基础设施
    Redis稳定性之战:AOF日志支撑数据持久化
    leetcode621. 任务调度器
    Html飞机大战(九): 使徒来袭 (设计敌机)
    Linux 添加路由的方法
    【计算机网络微课堂】5.8 TCP的运输连接管理
    事件循环与 async/await
    C++ 将off格式文件转换成ply格式存储
    新时代背景下智慧城市的建设与5G技术有何关联
    【ARC116F】Deque Game 题解
  • 原文地址:https://blog.csdn.net/weixin_47980825/article/details/126317859