在Vue3和TypeScripts中使用pinia

定义(state 是 store 的数据 (data),getters 是 store 的计算属性 (computed),而 actions 则是方法 (methods))

TypeScript 复制代码
// 引入pinia 和 vue
import { defineStore } from 'pinia'
import { ref, computed } from 'vue';
// 定义了一个名为 counter 的 store
export const useStore = defineStore('counter', ()=> {
    // 定义
    const count = ref(0)
    const userName = ref('')

    // Getter(计算属性)------ 只读
    const upperName = computed(() => userName.value.toUpperCase())
    // Action ------ 修改状态的方法
    function increment() {
        count.value++
    }

    function setUserName(name) {
        userName.value = name
    }
    
    
    // 重置函数
    function $reset() {
        count.value = 0
    }
    // 必须 return 所有要暴露的内容
    return {
        count,
        userName,
        increment,
        setUserName,
        $reset
    }
}

在组件中调用

TypeScript 复制代码
<template>
  <p>Count: {{ store.count }}</p>
  <p>Upper Name: {{ store.upperName }}</p>
  <button @click="store.increment">+1</button>
</template>

<script setup>
import { useCounterStore } from '@/stores/counter'

const store = useCounterStore()

// 调用 action
store.increment()
store.setUserName('Alice')

// 读取 state 或 getter(像属性一样访问)
console.log(store.count)       // 1
console.log(store.upperName)   // "ALICE"
</script>
相关推荐
颜酱几秒前
LLM为核,上下文为限:拆解AI Agent生态的底层逻辑
前端·人工智能
前端那点事4 分钟前
Vue3 超全复盘!30+前端高频核心知识点(开发+面试全覆盖)
前端·vue.js
顾随8 分钟前
(二)kettle--输入与输出
javascript·数据库·kettle
幼儿园技术家1 小时前
为什么 SSR 一定会有 hydration mismatch?
前端
FlyWIHTSKY1 小时前
Vue 3 中 RouteRecord 详解(Vue Router 4)
前端·javascript·vue.js
老王以为1 小时前
前端视角下的 Java
java·javascript·程序员
yingyima1 小时前
用 cron 定时发送邮件报告:实战案例详解
前端
GAMC1 小时前
从 “凭感觉写代码” 到 “按规范做开发”:OpenSpec 让 AI 编程回归工程化
前端·人工智能
Alice-YUE1 小时前
【JS高频八股】什么是闭包?
开发语言·javascript·笔记·学习
微学AI1 小时前
Claude-Code-python 前端改造项目工作流程详解
开发语言·前端·python