Doris面试题
2026/3/19 9:23:46
好,这一段是Pinia 的 settings 全局配置仓库,再加上VueUse 的暗黑模式。
你现在问的是「语法结构」,我就不扯业务细节,专门把每一层语法是干嘛的、为什么这样写讲清楚。
import...import...constxxx=...constyyy=...constuseSettingsStore=defineStore('settings',{state:()=>({}),actions:{}})exportdefaultuseSettingsStore👉这是 Pinia 的标准 Store 定义结构
可以拆成5 个语法层级:
import(依赖引入)defineStore定义 storestate:响应式状态actions:方法(可改 state)importdefaultSettingsfrom'@/settings'defaultSettings是一个普通 JS 对象(不是响应式)import{useDark,useToggle}from'@vueuse/core'import{useDynamicTitle}from'@/utils/dynamicTitle'document.titleconstisDark=useDark()consttoggleDark=useToggle(isDark)isDark// Ref<boolean>toggleDark()// 切换 isDark.value👉 这是组合式 API + Pinia 混用的典型写法
const{sideTheme,showSettings,navType,tagsView,tagsIcon,fixedHeader,sidebarLogo,dynamicTitle,footerVisible,footerContent}=defaultSettings等价于:
constsideTheme=defaultSettings.sideThemeconstshowSettings=defaultSettings.showSettings...作用:
defaultSettings.xxx的重复书写conststorageSetting=JSON.parse(localStorage.getItem('layout-setting'))||''JSON.parse(null)→nullnull || ''→''👉 所以storageSetting要么是对象,要么是空字符串
⚠️这也是为什么下面频繁用=== undefined判断
constuseSettingsStore=defineStore('settings',{state:()=>({}),actions:{}})'settings''settings'store 的唯一 ID
用于:
state: () => ({})state:()=>({title:'',theme:...,isDark:isDark.value})reactive等价概念:
conststate=reactive({title:''})典型例子:
theme:storageSetting.theme||'#409EFF'navType:storageSetting.navType===undefined?navType:storageSetting.navType||false||true// 会变成 true(不符合预期)所以用:
===undefined?默认值:本地值👉这是一个非常成熟的 JS 防坑写法
actions:{changeSetting(data){...}}等价于:
changeSetting:function(data){}但这是ES6 简写
this的含义(关键)this[key]=value在 Pinia 的actions中:
this👉store 实例conststore=useSettingsStore()store[key]=valuehasOwnProperty防御式写法if(this.hasOwnProperty(key)){this[key]=value}防止:
setTitle的语法重点setTitle(title){this.title=titleuseDynamicTitle()}toggleTheme(){this.isDark=!this.isDarktoggleDark()}语法重点:
this.isDark:Pinia 状态toggleDark():VueUse 的 ref 操作exportdefaultuseSettingsStore使用方式:
constsettingsStore=useSettingsStore()settingsStore.toggleTheme()这是「选项式 Pinia + 组合式 API」的混合写法
| 部分 | 作用 |
|---|---|
| import | 引入依赖 |
| 顶层 const | 非响应式工具 |
| defineStore | 定义 store |
| state | 响应式数据 |
| actions | 修改 state 的方法 |
如果你下一步想搞清楚:
你直接说一句:
“讲 Pinia setup 写法”或“这段怎么简化”就行。