在 Vue3 的组合式 API 中,Vuex 同样没有内置适用于 <script setup> 的 mapGetters 辅助函数,但我们可以参考 mapState 的实现思路,封装一个适用于组合式 API 的 mapGetters 工具函数,实现批量映射 getters 的功能。
mapGetters在 store/mappers.js 中添加 mapGetters 函数(可与之前的 mapState 放在一起):
在 <script setup> 中导入并使用自定义的 mapGetters:
<template>
<div>
<p>计数加倍:{{ doubleCount }}</p>
<p>用户名(格式化):{{ formattedName }}</p>
<p>购物车商品总数:{{ cartTotal }}</p>
</div>
</template>
<script setup>
import { mapGetters } from './store/mappers'
// 映射getters(支持多种形式)
const { doubleCount, formattedName, cartTotal } = mapGetters({
// 直接映射getters中的doubleCount,变量名与getter名一致
doubleCount: 'doubleCount',
// 自定义变量名,映射getters中的userFormattedName
formattedName: 'userFormattedName',
// 映射命名空间模块中的getter(假设存在cart模块)
cartTotal: 'cart/totalItems'
})
// 也支持数组形式(适用于变量名与getter名一致的场景)
// const { doubleCount, userFormattedName } = mapGetters(['doubleCount', 'userFormattedName'])
</script>mapState 类似,mapGetters 通过 computed 包装 getters,确保 getters 依赖的 state 变化时,组件能自动更新。mapGetters(['doubleCount', 'userName']) —— 适用于变量名与 getter 名完全一致的场景。mapGetters({ 别名: getter名 }) —— 支持自定义变量名,更灵活。cart 模块),直接在 getter 名前加模块前缀即可(如 cart/totalItems),无需额外修改工具函数。mapState 配合使用:实际开发中可同时导入 mapState 和 mapGetters,按需映射 state 和 getters: import { mapState, mapGetters } from './store/mappers'
const { count } = mapState(['count'])
const { doubleCount } = mapGetters(['doubleCount'])通过封装自定义的 mapGetters 工具函数,我们可以在 Vue3 组合式 API 中实现与 Vue2 类似的 getters 批量映射功能。核心逻辑是利用 computed 保持响应性,并通过 useStore 访问 store 中的 getters。
如果项目中映射需求较少,直接使用 computed(() => store.getters.xxx) 手动映射更简洁;若需要批量映射,封装工具函数能提高开发效率。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。