Pinia——Getters


什么是 Getter

Getter 完全等同于 Store 状态的计算值,在 defineStore() 中的 getters 属性中定义
当它接收“状态”作为第一个参数时,鼓励箭头函数的使用

export const useStore = defineStore('main',{
    state:() => ({
        counter:0 
    }),
    getters:{
        doubleCount:(state) => state.counter * 2    
    }
})

getter 只会依赖状态,可能会使用到其他 getter,因此可以在定义常规函数时通过 this 访问到整个 store 的实例

export const useStore = defineStore('main',{
    state:() => ({
        counter:0    
    }),
    getters:{
        // 自动将返回类型推断为 Number
        doubleCount(state) {
            return state.counter * 2        
        },
        // 返回类型必须明确设置
        doublePlusOne():number {
            return this.counter *2 + 1        
        }    
    }
})
在使用 this 访问时,需要定义返回类型(在 TypeScript 中),这是因为 TypeScript 中的一个已知限制
这不会影响使用箭头函数定义的 getter,也不会影响不使用 this 的 getter

访问其他 getter

与计算属性一样,可以组合多个 getter。通过 this 访问任何其他 getter

export const useStore = defineStore('main', {
  state: () => ({
    counter: 0,
  }),
  getters: {
    doubleCount: (state) => state.counter * 2,
    doubleCountPlusOne() {
      // 通过 this 访问任何其他 getter
      return this.doubleCount + 1
    },
  },
})

将参数传递给 getter

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

export const useStore = defineStore('main', {
  getters: {
    getUserById: (state) => {
      return (userId) => state.users.find((user) => user.id === userId)
    },
  },
})

并在组件中使用:

<script>
export default {
  setup() {
    const store = useStore()

    return { getUserById: store.getUserById }
  },
}
</script>

<template>
  <p>User 2: {{ getUserById(2) }}</p>
</template>

请注意!!!在执行此操作时,getter 不再缓存,它们只是调用的函数

访问其他 Store 的 getter

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

import { useOtherStore } from './other-store'

export const useStore = defineStore('main', {
  state: () => ({
    // ...
  }),
  getters: {
    otherGetter(state) {
      const otherStore = useOtherStore()
      return state.localData + otherStore.data
    },
  },
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pinia的getters是用于在pinia容器中定义计算属性的方法。在pinia容器的getters中,您可以通过访问容器的state来定义各种计算属性。通过getters,您可以对容器的state进行处理和转换,并根据需要返回结果。这些getters可以在组件中使用,并且它们会根据state的变化自动更新。 在pinia的getters中,您可以定义多个计算属性,并且可以访问其他的getters或actions。您还可以返回一个函数来接受参数,并在函数中对state进行处理。需要注意的是,当您返回一个函数时,getter将不再被缓存,每次调用都会执行函数。 下面是一个使用pinia的getters的示例代码: ```javascript import { defineStore } from 'pinia' const useMainStore = defineStore('main', { state: () => { return { message1: 'Hello', message2: 'Pinia', count: 1, number: 666 } }, getters: { // 定义的计算属性,可以访问state并返回结果 computedProperty(state) { return state.count * state.number }, // 定义的计算属性,接受参数并返回结果 computedFunction: (state) => (param) => { return state.count + param } }, actions: { // 定义的action // ... } }) export { useMainStore } ``` 以上代码示例中,我们定义了两个getters,`computedProperty`和`computedFunction`。`computedProperty`访问了state中的`count`和`number`属性,并返回它们的乘积。`computedFunction`接受一个参数`param`,并返回`count`加上`param`的结果。 请注意,上述代码仅为示例,实际使用时您可能需要根据您的具体情况来定义和使用getters。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值