vue3中Pinia的使用之getters

简介: vue3中Pinia的使用之getters

Getter



Getter 完全等同于 Store 状态的 计算值。



意味着,getter就和vuex里面的computed一样。它接收一个参数,参数就是state。


//src/store/index.ts
import { defineStore } from 'pinia'
export const useCounters = defineStore('counter',{
  state() => {
      return{
          count100,
          people4,
      }
  },
  getters:{
      getAllCountstate => state.count  state.people
  }
})

//src/App.vue
<script>
import { useCounters } from '@/store'
export default {
  setup() {
    const useCounter = useCounters();
    return {
      useCounter,
    }
  },
}
</script>
<template>
  <div>
    今天种了多少颗苹果树:{ { useCounter.getAllCount }}颗。
  </
div>
</template>

alt

当然getters除了参数可以去访问state,也可以使用this,去访问到 整个 store 的实例,但是需要定义返回类型(在 TypeScript 中)



import { defineStore } from 'pinia'
export const useCounters = defineStore('counter',{
    state() => {
        return{
            count100,
            people4,
        }
    },
    getters:{
        getAllCountstate => state.count 
 state.people,
        // 返回类型必须明确设置
        doubleCount(): number {
            return (this.count  this.people)  2 
        },
    }
})

alt

一、访问其他 getter


与计算属性一样,您可以组合多个getter。 通过this 访问任何其他 getter。即使您不使用 TypeScript,您也可以使用 JSDoc 提示您的 IDE 类型:


import { defineStore } from 'pinia'
export const useCounters = defineStore('counter',{
    state() => {
        return{
            count100,
            people4,
        }
    },
    getters:{
        getAllCountstate => state.count  state.people,
      // 这里需要我们自己添加类型(在 JS 中使用 JSDoc)。 我们还可以
      // 使用它来记录 getter
      /**
       
 返回计数器值乘以二。
       
       
 @returns {number}
       /
        doubleCount(): number {
            return this.getAllCount 
 2 
        },
    }
})

二、将参数传递给 getter


Getters 只是幕后的 computed 属性,因此无法向它们传递任何参数。 但是,您可以从 getter 返回一个函数以接受任何参数:


import { defineStore } from 'pinia'
export const useUserStores = defineStore('counter',{
    state() => {
        return{
            users: [
                {
                    id100001,
                    name'大宝',
                    sex'male'
                },
                {
                    id100002,
                    name'小宝',
                    sex'male'
                }
            ]
        }
    },
    getters:{
        getUserById(state) => {
            return (userId) => state.users.find((user) => user.id === userId)
        },
    }
})

<script>
import { useUserStores } from '@/store'
export default {
  setup() {
    const useUserStore = useUserStores();
    return {
      useUserStore,
    }
  },
}
</script>
<template>
  <div>
    用户2的id是:{ { useUserStore.getUserById(100002) }}。
  </
div>
</template>

请注意,在执行此操作时,getter 不再缓存,它们只是您调用的函数。 但是,您可以在 getter 本身内部缓存一些结果


二、访问其他 Store 的getter


要使用其他存储 getter,您可以直接在 better 内部使用它:


import { defineStore } from 'pinia'
import { useOtherStores } from './other-store'
export const useUserStores = defineStore('counter',{
    state() => {
        return{
            count100
        }
    },
    getters:{
        getAllCount(state) => {
            const otherData = useOtherStores();
            return state.count * otherData.size
        },
    }
})

alt

总结:Pinia的getters,就是vuex computed的替身。pinia好的地方就是完整的 TypeScript 支持,所以访问this 记得添加返回类型即可。


相关文章
|
5天前
|
前端开发 JavaScript API
基于Vue3+Hooks实现4位随机数和60秒倒计时
本文介绍了如何在Vue3中使用Hooks API来实现生成4位随机数和执行60秒倒计时的功能,并提供了详细的代码示例和运行效果展示。
23 1
基于Vue3+Hooks实现4位随机数和60秒倒计时
|
1天前
|
JSON JavaScript 前端开发
Vue3在工作中使用的一些经验总结
这篇文章是关于Vue 3项目中使用TypeScript的一些经验总结,包括如何配置TSLint进行代码规范和类型检查,以及如何将现有的JavaScript代码迁移到TypeScript的步骤和注意事项。
Vue3在工作中使用的一些经验总结
|
3天前
|
JavaScript 算法 API
Vue 3有哪些新特性
【8月更文挑战第16天】Vue 3有哪些新特性
23 1
|
5天前
|
JavaScript UED
如何在Vue3项目中使用防抖节流技巧
在Vue 3项目中使用防抖和节流技巧以优化组件性能,包括使用`lodash`库和自定义实现这两种方法。
10 0
如何在Vue3项目中使用防抖节流技巧
|
19小时前
|
JavaScript 前端开发 API
Vue3入门
Vue3入门
4 0
|
4天前
|
JavaScript
创建 Vue3 项目
创建 Vue3 项目
10 0
|
5天前
|
JavaScript
在Vue3+ElementPlus项目中使用具有懒加载的el-tree树形控件
在Vue 3和Element Plus项目中实现具有懒加载功能的el-tree树形控件,以优化大数据量时的页面性能。
13 0
5分钟上手Vue+ts+vite+pinia
5分钟上手Vue+ts+vite+pinia
692 0
|
1天前
|
JavaScript
Vue学习之--------路由的query、params参数、路由命名(3)(2022/9/5)
这篇文章详细介绍了Vue路由中的query参数、命名路由、params参数以及props配置的使用方式,并通过实际项目案例展示了它们在开发中的应用和测试结果,同时解释了`<router-link>`的`replace`属性如何影响浏览器历史记录。
Vue学习之--------路由的query、params参数、路由命名(3)(2022/9/5)
|
1天前
|
JavaScript
Vue学习之--------VueX(2022/8/31)
这篇文章是关于VueX的基础知识介绍,涵盖了VueX中的state、mutations、getters和actions的定义和使用,以及Action提交mutation而非直接变更状态,以及mutations的同步执行特性。
Vue学习之--------VueX(2022/8/31)