当前位置: 首页 > news >正文

vue3.0 +TypeScript 项目中pinia基础语法和使用

场景是采用vite搭建的vue3.0+ts项目,官方更推荐使用pinia这个状态管理工具,现在就开始学习记录一下

安装:

npm install pinia  //下载安装

引入:在main.ts中全局引入:

import { createApp } from 'vue'
import { createPinia } from 'pinia' 
import App from './App.vue'
const app = createApp(App)
const pinia = createPinia()
app.use(pinia)
app.mount('#app')

定义store文件夹再定义index.ts入口文件

state: 定义store的初始状态,也就是数据类似vue2中的data

import { defineStore } from 'pinia'
interface UserState {name: stringage: numberisAdmin: boolean
}
export const useUserStore = defineStore('user', {state: (): UserState => ({name: 'Alice',age: 25,isAdmin: false})
})
// 页面使用
import { useUserStore } from '@/stores/user'
const store = useUserStore()
console.log(store.name) // "Alice"

getters:类似于computer计算属性,

可以通过this去访问store实例,包括函数和初始值

export const useUserStore = defineStore('user', {state: () => ({name: 'Alice',age: 25}),getters: {isAdult(): boolean {return this.age >= 18},}
})
// 页面使用
const store = useUserStore()
console.log(store.isAdult) // true

actions:可以进行同步或异步的操作

可以通过this去访问store实例,包括函数和初始值

export const useUserStore = defineStore('user', {state: () => ({users: [] ,}),actions: {// 同步 actionaddUser(user: string) {this.users.push(user)},// 异步 actionasync fetchUsers() {try {const response = await api.getUsers()this.users = response.data} catch (error) {console.error('Failed to fetch users:', error)}},}
})
// 页面使用
const store = useUserStore()
store.addUser('1314')

id:用于store的唯一标识

// 在 defineStore 的第一个参数中定义
export const useUserStore = defineStore('user', {// ...
})

$符号:store中内置的属性和方法

$patch:批量修改state中的值

store.$patch({name: 'Bob',age: 30
})
// 或使用函数形式进行批量修改state
store.$patch((state) => {state.items.push({ id: 1 })state.hasChanged = true
})

$reset:重置 state 为初始值

store.$reset()

$subscribe:订阅 state 变化

store.$subscribe((mutation, state) => {console.log('State changed:', mutation.type, state)
})

$state:访问整个 state 对象

console.log(store.$state)

组合式 Store 语法:类似vue中的写法

export const useCounterStore = defineStore('counter', () => {const count = ref(0)const name = ref('Eduardo')const doubleCount = computed(() => count.value * 2)function increment() {count.value++}return { count, name, doubleCount, increment }
})
http://www.dtcms.com/a/307609.html

相关文章:

  • 【大数据】open_metadata 开源元数据管理平台建设与数据血缘实践
  • 「源力觉醒 创作者计划」开源大模型重构数智文明新范式
  • AI任务相关解决方案12-NLP的15项任务大融合系统:传统NLP与Qwen大模型的深度结合
  • NTLDR源代码分析之从GetSector函数到blread函数
  • 解决 IntelliJ IDEA Build时 Lombok 不生效问题
  • 商旅平台怎么选?如何规避商旅流程中的违规风险?
  • 【未解决】STM32无刷电机驱动电路问题记录
  • .NET Core部署服务器
  • 智慧收银系统开发进销存库存统计,便利店、水果店、建材与家居行业的库存汇总管理—仙盟创梦IDE
  • Spring Boot 异常处理:从全局捕获到优化用户体验!
  • PostgreSQL面试题及详细答案120道(01-20)
  • 解放双手!Report Distro 实现报表自动化分发
  • 微软发布Microsoft Sentinel数据湖国际版
  • SecurityContextHolder 管理安全上下文的核心组件详解
  • 【STM32】HAL库中的实现(一)GPIO/SysTick/EXTI
  • 【运维基础】Linux 计划任务管理
  • AI 安监系统:为工业园安全保驾护航
  • 社会治安满意度调查:为城市安全治理提供精准参考(满意度调查公司)
  • LeetCode 85:最大矩形
  • 光伏热斑误检率↓79%!陌讯多模态融合算法在智慧能源的落地优化
  • 融合数字孪生的智慧能源光伏场站检测系统应用解析
  • MongoDB用户认证authSource
  • Unity_数据持久化_PlayerPrefs存储各数据类型
  • Unity UI的未来之路:从UGUI到UI Toolkit的架构演进与特性剖析(6)
  • 【笔记】重学单片机(51)
  • Mac上优雅简单地使用Git:从入门到高效工作流
  • threejs创建自定义多段柱
  • 浅谈物联网嵌入式程序开发源码技术方案
  • STORM代码阅读笔记
  • 邢台市某区人民医院智慧康养平台建设项目案例研究