在 script setup 中结合 pinia 编写简洁仓库的核心是使用函数式 definestore,直接用 ref/computed 声明状态与派生值,actions 作为普通函数返回,自动成为 store 属性;组件中通过 import + usexxxstore 调用,配合 storetorefs 保持响应性。

在 script setup 中结合 Pinia 编写简洁仓库,核心是利用组合式 API 风格直接定义响应式数据与逻辑,避免冗余结构。不需要写 export default 或 setup() 函数包裹,代码更扁平、可读性更强。
定义仓库:用函数式 defineStore
推荐使用函数式写法(即 defineStore 第二个参数为箭头函数),天然契合 script setup 的思维习惯:
- 用
ref和computed声明状态和派生值,像在组件里一样自然 - 动作(actions)直接写成普通函数,
this不再出现,语义更清晰 - 所有返回的变量和方法都自动成为 store 的属性,无需额外解构或映射
示例(src/stores/counter.js):
在组件中使用:一行导入 + 一行调用
script setup 下使用仓库极其轻量:
Vue 3 组合式 API 与 <script setup> 最佳实践,涵盖代码组织、useXxx 模式、组合式函数设计、Store 集成、响应式优化及功能抽取。</p>
</div>
<a rel="nofollow" href="/xiazai/skill8748" title="vue-composition-api-best-practices" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
<ul>
<li>直接 <code>import { useXxxStore }</code>,然后调用获取 store 实例</li>
<li>状态、getter、action 全部解构或按需访问,无任何模板代码</li>
<li>支持响应式解构(需搭配 <code>storeToRefs</code> 防止丢失响应性)</li>
</ul>
<p>示例(<code>Counter.vue</code>):</p>
<font color="#888"><script setup><br>import { storeToRefs } from 'pinia'<br>import { useCounterStore } from '@/stores/counter'<br><br>const counterStore = useCounterStore()<br>const { count, doubleCount } = storeToRefs(counterStore) // 保持响应性<br><br>// 直接调用方法<br>const { increment, reset } = counterStore<br></script>
{{ count }} × 2 = {{ doubleCount }}
进阶技巧:简化异步逻辑与复用逻辑
函数式仓库天然支持逻辑复用和组合:
- 可把常用工具函数(如请求封装、格式化)抽离为独立 hook,在仓库内 import 使用
- 异步 action 写法和组件内一致,用
async/await,无需特殊处理 - 多个仓库之间可通过互相调用实现协同(例如用户登录后自动更新购物车状态)
例如在用户仓库中触发登录并同步更新计数器:
export const useUserStore = defineStore('user', () => {const counter = useCounterStore() // 直接引入其他 store
const login = async () => {
await api.login()
counter.increment() // 调用另一仓库方法
}
return { login }
})
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!
相关文章
Vue 3 组合式函数怎么处理富文本编辑器的状态同步
Vue 自定义表单组件怎么处理焦点失焦事件的冒泡与触发
Vue 表单校验怎么配合 Ant Design 编写校验规则
Vue 组件 Emits 怎么实现分页页码改变的事件通知
Vue 3 逻辑复用怎么实现剪贴板复制功能的逻辑复用
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn









