pinia 的 getters 是基于 state 的响应式计算属性,用于推导派生数据;它缓存结果、自动更新,支持函数和 this 两种定义方式,应在组件中通过 storetorefs 或直接访问安全使用,不可修改 state 或产生副作用。

Pinia 的 getters 就是 Store 里的“智能计算器”,它不存数据,只基于 state 做响应式推导,用好了能大幅减少组件内重复逻辑、避免手动过滤或计算出错。
getters 的核心作用
它本质是缓存的计算属性:依赖的 state 不变,多次访问不会重复执行;只要 state 更新,相关 getters 自动重算并触发视图更新。比如任务看板里“待办数”“完成率”这类值,全交给 getters 管理最稳妥。
两种定义方式怎么选
函数形式最常用,直接接收 state 参数:
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
-
简单派生:如
todoTasks: (state) => state.tasks.filter(t => t.status === 'todo') -
带参数的动态查询:如
taskById: (state) => (id) => state.tasks.find(t => t.id === id),调用时写store.taskById(123) -
需要复用其他 getter才用 this 形式:比如
progress(): number { return (this.doneTasks.length / this.tasks.length) || 0 }
在组件里安全使用 getters
别直接解构 getters(会失去响应式),推荐用 storeToRefs 或直接访问:
- 用
storeToRefs:适合同时要 state 和 getters,且想保持响应式绑定 - 直接调用:如
{{ store.todoTasks.length }}或{{ store.progress }}%,简洁明了 - 注意:返回对象的 getters(如
stats())慎用,频繁返回新对象可能影响性能,必要时可用computed包一层做浅层缓存
常见误区提醒
getters 不能修改 state,也不该有副作用(比如发请求、改 localStorage);它只负责“读”和“算”。拖拽改变任务状态、增删任务这些操作,必须走 actions(比如 updateTask),再由 actions 调用 saveTasks() 持久化——getters 只管呈现结果,不管怎么来的。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!









