news 2026/4/24 2:24:35

Vue-Pinia defineStore 语法结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue-Pinia defineStore 语法结构

好,这一段是Pinia 的 settings 全局配置仓库,再加上VueUse 的暗黑模式
你现在问的是「语法结构」,我就不扯业务细节,专门把每一层语法是干嘛的、为什么这样写讲清楚。


一、整体结构一眼看懂

import...import...constxxx=...constyyy=...constuseSettingsStore=defineStore('settings',{state:()=>({}),actions:{}})exportdefaultuseSettingsStore

👉这是 Pinia 的标准 Store 定义结构
可以拆成5 个语法层级

  1. import(依赖引入)
  2. 顶层普通变量(非响应式)
  3. defineStore定义 store
  4. state:响应式状态
  5. actions:方法(可改 state)

二、import 语法层

importdefaultSettingsfrom'@/settings'
  • 默认导入
  • defaultSettings是一个普通 JS 对象(不是响应式)
import{useDark,useToggle}from'@vueuse/core'
  • 命名导入
  • VueUse 提供的组合式函数
import{useDynamicTitle}from'@/utils/dynamicTitle'
  • 自定义工具函数
  • 修改document.title

三、普通变量(不属于 Pinia)

constisDark=useDark()consttoggleDark=useToggle(isDark)

语法重点

  • 写在 store 外面
  • 只会执行一次
  • 不会被 Pinia 重建
isDark// Ref<boolean>toggleDark()// 切换 isDark.value

👉 这是组合式 API + Pinia 混用的典型写法


四、解构默认配置(ES6 解构语法)

const{sideTheme,showSettings,navType,tagsView,tagsIcon,fixedHeader,sidebarLogo,dynamicTitle,footerVisible,footerContent}=defaultSettings

等价于:

constsideTheme=defaultSettings.sideThemeconstshowSettings=defaultSettings.showSettings...

作用:

  • 减少defaultSettings.xxx的重复书写
  • 提高可读性

五、localStorage 读取(短路语法)

conststorageSetting=JSON.parse(localStorage.getItem('layout-setting'))||''

语法点

  • JSON.parse(null)null
  • null || ''''

👉 所以storageSetting要么是对象,要么是空字符串

⚠️这也是为什么下面频繁用=== undefined判断


六、defineStore 语法结构(重点)

constuseSettingsStore=defineStore('settings',{state:()=>({}),actions:{}})

1️⃣'settings'

'settings'
  • store 的唯一 ID

  • 用于:

    • devtools
    • pinia 持久化
    • 跨模块引用

2️⃣state: () => ({})

state:()=>({title:'',theme:...,isDark:isDark.value})
语法规则
  • 必须是函数
  • 返回一个普通对象
  • Pinia 内部会自动转为reactive

等价概念:

conststate=reactive({title:''})

3️⃣ state 中的“或运算符 + 三元”

典型例子:

theme:storageSetting.theme||'#409EFF'
navType:storageSetting.navType===undefined?navType:storageSetting.navType
为什么不用||
false||true// 会变成 true(不符合预期)

所以用:

===undefined?默认值:本地值

👉这是一个非常成熟的 JS 防坑写法


七、actions 语法结构

1️⃣ 普通方法写法

actions:{changeSetting(data){...}}

等价于:

changeSetting:function(data){}

但这是ES6 简写


2️⃣this的含义(关键)

this[key]=value

在 Pinia 的actions中:

  • this👉store 实例
  • 等价于:
conststore=useSettingsStore()store[key]=value

3️⃣hasOwnProperty防御式写法

if(this.hasOwnProperty(key)){this[key]=value}

防止:

  • 写入不存在的字段
  • 拼写错误污染 store

4️⃣setTitle的语法重点

setTitle(title){this.title=titleuseDynamicTitle()}
  • 修改 state
  • 调用副作用函数
  • actions 可以有副作用(state 不行)

5️⃣ 切换暗黑模式

toggleTheme(){this.isDark=!this.isDarktoggleDark()}

语法重点:

  • this.isDark:Pinia 状态
  • toggleDark():VueUse 的 ref 操作
  • 两者同步,但不是同一个对象

八、export default

exportdefaultuseSettingsStore

使用方式:

constsettingsStore=useSettingsStore()settingsStore.toggleTheme()

九、一句话总结「语法结构」

这是「选项式 Pinia + 组合式 API」的混合写法

部分作用
import引入依赖
顶层 const非响应式工具
defineStore定义 store
state响应式数据
actions修改 state 的方法

如果你下一步想搞清楚:

  • 🔍为什么 isDark 不直接放 state 里
  • 🧠defineStore vs setup store 的区别
  • 🧹怎么改成 setup 风格

你直接说一句:
“讲 Pinia setup 写法”“这段怎么简化”就行。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 23:15:01

项目解决方案:充电车棚烟火识别解决方案

目录 第一章 项目背景 1.1 电动自行车充电火灾频发背景 1.2 火灾监控的重要性 1.3 地方标准与政策要求 1.4 技术发展趋势 第二章 需求确认 2.1 实时烟火检测需求 2.2 双重验证与准确性提升 2.3 远程确认与灭火启动 2.4 多平台访问与集中管理 2.5 兼容性与扩展性 第…

作者头像 李华
网站建设 2026/4/18 16:33:37

从零开始实现一个简单的GPU矩阵乘法

假设我们要计算 CABC A \times BCAB&#xff0c;其中 AAA 是 MKM \times KMK 矩阵&#xff0c;BBB 是 KNK \times NKN 矩阵&#xff0c;CCC 是 MNM \times NMN 矩阵。1. 矩阵乘法回顾 矩阵 CCC 中任意元素 Ci,jC_{i, j}Ci,j​ 的值&#xff0c;是通过将矩阵 AAA 的第 iii 行与…

作者头像 李华
网站建设 2026/4/21 6:10:06

如何测量你的GPU应用性能:算力与带宽

在高性能计算&#xff08;HPC&#xff09;和人工智能领域&#xff0c;开发一个能够正确运行的CUDA程序仅仅是第一步。真正的挑战在于如何评估其运行效率&#xff0c;并识别性能瓶颈。GPU的应用性能评价主要围绕两个核心指标展开&#xff1a;计算吞吐量&#xff08;算力&#xf…

作者头像 李华
网站建设 2026/4/23 10:41:25

nrf52832的mdk下载程序环境搭建入门必看

从零开始搭建 nRF52832 的 Keil MDK 烧录环境&#xff1a;新手避坑全指南 你是不是也经历过这样的场景&#xff1f; 手里的 nRF52832 开发板接上电脑&#xff0c;打开 Keil&#xff0c;点下载按钮却弹出“Cannot access target”或“Flash algorithm failed”……明明代码写得…

作者头像 李华
网站建设 2026/4/17 18:12:11

AI大模型支持下的:SCI论文写作(含引言、文献综述、假设、方法、结果、讨论、结论)

随着学术竞争日益激烈&#xff0c;论文写作的效率与质量成为科研入门者、职场晋升者及在校学子的核心诉求&#xff0c;传统写作模式中文献检索繁琐、框架构建迷茫、数据分析低效等痛点愈发凸显&#xff0c;而AI技术的飞速发展为打破这些瓶颈提供了全新可能。精准对接学术写作需…

作者头像 李华
网站建设 2026/4/22 19:37:40

GPT-SoVITS语音模型导出格式说明(ONNX/TensorRT)

GPT-SoVITS语音模型导出格式说明&#xff08;ONNX/TensorRT&#xff09; 在个性化语音合成技术迅速普及的今天&#xff0c;用户不再满足于千篇一律的“机器音”&#xff0c;而是期待能听到亲人、偶像甚至虚拟角色的声音。如何用极少量样本快速克隆音色&#xff0c;并实现实时高…

作者头像 李华