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

大学生免费ppt网站莆田网站建设技术托管

大学生免费ppt网站,莆田网站建设技术托管,陕西煤化建设集团网站,纯静态网站使用插件扩展功能 可以同时使用多个插件(插件“中间件式”机制)一、使用多个插件的方式二、插件机制简图三、插件互不冲突的关键点四、实战示例:多插件组合使用五、组合使用注意事项推荐插件组合搭配方案(实战模板) 根…

使用插件扩展功能

    • 可以同时使用多个插件(插件“中间件式”机制)
      • 一、使用多个插件的方式
      • 二、插件机制简图
      • 三、插件互不冲突的关键点
      • 四、实战示例:多插件组合使用
      • 五、组合使用注意事项
      • 推荐插件组合搭配方案(实战模板)
    • 根据不同 Store 应用不同插件
      • 🧠 原理说明:
      • 🔧 示例:不同 Store 应用不同插件逻辑
        • 1. 插件模板(适用于多个 Store)
        • 2. 注册时统一使用该插件
      • 🧩 更灵活的“插件调度器”方案
        • ✅ 思路:创建一个“插件调度器”,在其中根据 store id 路由到具体插件函数
      • 🧠 Bonus:Store 中显式控制插件启用(更精细)
      • ✅ 小结:插件应用范围控制方法

可以同时使用多个插件(插件“中间件式”机制)

Pinia 插件是可以同时使用多个的,而且它们是按顺序依次作用在每个 Store 上的。这种机制非常适合组合功能,比如同时使用持久化、日志追踪、权限守卫等插件,构建出一个高度自动化、具备横切能力的状态管理体系。


一、使用多个插件的方式

import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
import piniaLogger from 'pinia-plugin-logger'
import { authGuardPlugin } from './plugins/authGuard'
import { apiPlugin } from './plugins/api'const pinia = createPinia()// 插件注册顺序决定执行顺序(按 use 添加顺序生效)
pinia.use(piniaPluginPersistedstate)
pinia.use(piniaLogger)
pinia.use(authGuardPlugin)
pinia.use(apiPlugin)app.use(pinia)

二、插件机制简图

defineStore()│└───> 插件1 处理 store(如注入 persist)│└───> 插件2 处理 store(如注入 logger)│└───> 插件3 ...

三、插件互不冲突的关键点

  • 插件返回值是附加在 store 上的属性(如 $api$persist
  • 插件内部用 $onAction / $subscribe 监听,不会篡改 state 本身
  • 多个插件监听同一字段或 action 是允许的,但应避免“副作用冲突”

四、实战示例:多插件组合使用

// plugins/api.ts
export const apiPlugin = ({ store }) => {store.$api = axios.create({ baseURL: '/api' })
}// plugins/logger.ts
export const loggerPlugin = ({ store }) => {store.$onAction(({ name, args }) => {console.log(`[Action]: ${name}`, args)})
}// plugins/authGuard.ts
export const authGuardPlugin = ({ store }) => {if (store.$id === 'auth') {store.$onAction(({ name, after }) => {if (name === 'logout') {console.warn('退出登录,清理本地缓存...')}})}
}

全局注册:

pinia.use(apiPlugin)
pinia.use(loggerPlugin)
pinia.use(authGuardPlugin)
pinia.use(piniaPluginPersistedstate)

在 Store 中使用:

export const useUserStore = defineStore('user', {state: () => ({ token: '', userInfo: null }),actions: {async login(data) {const res = await this.$api.post('/login', data)this.token = res.data.token}},persist: true // 与持久化无缝结合
})

五、组合使用注意事项

注意点说明
插件注册顺序影响执行顺序loggerauth 之前,则先记录 action 再处理登出
不应在插件中同步修改状态应通过 action 或订阅完成副作用逻辑
插件注入变量应使用 $ 前缀避免与 state 属性冲突
SSR 场景需判断 process.client插件中涉及浏览器 API 时需处理

推荐插件组合搭配方案(实战模板)

场景推荐组合
用户系统persistedstate + authGuard + logger
表单缓存persistedstate(限路径) + logger
多模块项目dynamicModulePlugin + apiPlugin + i18nPlugin
SSR(Nuxt)persistedstate(仅客户端启用) + 自定义 hydrationPlugin

根据不同 Store 应用不同插件

按需组合与定向应用 —— 这是大型项目中常见的“精细化状态管理优化”策略。

Pinia 插件机制本质上是作用于 每个 Store 实例初始化时,而不是全局一次性设置。因此,我们可以通过插件内部判断当前正在处理的 Store,再决定是否注入特定逻辑或功能


🧠 原理说明:

// 插件本质结构
function myPlugin(context: PiniaPluginContext) {const { store } = contextif (store.$id === 'auth') {// 仅作用于 auth 模块} else if (store.$id === 'settings') {// 仅作用于 settings 模块}
}

🔧 示例:不同 Store 应用不同插件逻辑

1. 插件模板(适用于多个 Store)
// plugins/customPlugin.ts
export function customPlugin({ store }) {switch (store.$id) {case 'auth':store.$onAction(({ name }) => {console.log(`[auth action]: ${name}`)})breakcase 'settings':store.$subscribe((mutation, state) => {console.log(`[settings changed]: ${mutation.events}`, state)})breakdefault:break}
}
2. 注册时统一使用该插件
const pinia = createPinia()
pinia.use(customPlugin)

🧩 更灵活的“插件调度器”方案

适用于多个插件对多个 store 进行组合控制。

✅ 思路:创建一个“插件调度器”,在其中根据 store id 路由到具体插件函数
// plugins/dispatcher.tsimport { pluginForAuth } from './plugin-auth'
import { pluginForSettings } from './plugin-settings'const pluginMap = {auth: pluginForAuth,settings: pluginForSettings
}export const pluginDispatcher = (ctx: PiniaPluginContext) => {const plugin = pluginMap[ctx.store.$id]if (plugin) {plugin(ctx)}
}
// plugin-auth.ts
export const pluginForAuth = ({ store }) => {store.$onAction(({ name }) => {console.log(`[Auth Action]: ${name}`)})
}
// plugin-settings.ts
export const pluginForSettings = ({ store }) => {store.$subscribe((mutation) => {console.log(`[Settings Updated]:`, mutation)})
}
// main.ts
pinia.use(pluginDispatcher)

✅ 这种方式非常适合大型系统中:

  • 每个模块拥有独立插件逻辑
  • 插件逻辑可测试、可维护、易扩展
  • 动态按需启用,避免全局插件逻辑污染

🧠 Bonus:Store 中显式控制插件启用(更精细)

如果你希望 store 自身控制启用哪些插件逻辑,可以通过 state 或 meta 配置标记:

// 在 store 中配置
export const useUserStore = defineStore('user', {state: () => ({enableLogger: true})
})
// 在插件中读取配置
if (store.enableLogger) {store.$onAction(...)
}

✅ 小结:插件应用范围控制方法

方法特点
if (store.$id === 'xxx') 判断最直接,可快速实现按 store 分支逻辑
插件调度器 pluginDispatcher模块化管理多插件逻辑,高度可维护
store 中定义 meta/config 控制由 store 主动控制,支持动态开关插件功能

文章转载自:

http://6I5EpM5X.gLxmf.cn
http://3nrN7BZG.gLxmf.cn
http://M6pLo7Zn.gLxmf.cn
http://sLjCsbH5.gLxmf.cn
http://k4gXHKm5.gLxmf.cn
http://2tEVyWEu.gLxmf.cn
http://XDbhO9Xh.gLxmf.cn
http://LbgNEf5N.gLxmf.cn
http://XXVK7Hr3.gLxmf.cn
http://DIoJccQ1.gLxmf.cn
http://RjRVCgXE.gLxmf.cn
http://uGTiJMw5.gLxmf.cn
http://pB39JqYg.gLxmf.cn
http://hRsVrSlE.gLxmf.cn
http://Mh3r0qQE.gLxmf.cn
http://VnLHfFnX.gLxmf.cn
http://53mDzbh1.gLxmf.cn
http://A1N0bg9H.gLxmf.cn
http://uon3URi3.gLxmf.cn
http://hVxjnLqY.gLxmf.cn
http://AxJ1YYfs.gLxmf.cn
http://o2eIqDNi.gLxmf.cn
http://6i0mkA9I.gLxmf.cn
http://yApRBP26.gLxmf.cn
http://kLL2QDjn.gLxmf.cn
http://RMAHjbir.gLxmf.cn
http://eNsPXFfv.gLxmf.cn
http://dd2NqcdJ.gLxmf.cn
http://mJGiL2CL.gLxmf.cn
http://uVfo8gdC.gLxmf.cn
http://www.dtcms.com/wzjs/666693.html

相关文章:

  • 贸易公司 网站 扶持付费恶意点击软件
  • 帝国网站采集管理怎么做网站维护 代码
  • 高清图片素材网站推荐易语言怎么把网站音乐做进去
  • 做网站什么商品好苏州网站建设公司有哪些
  • 个人怎样建网站百度搜索资源平台提交
  • 做医疗护具网站企业案例网站生成
  • 广州高铁新建站在哪里品牌建设标题
  • 商务网站建设实训过程网站推广系统设计
  • 宝塔网站建设哪里做网站百度收录块
  • 猪价大涨已成定局南宁seo排名外包
  • 网站制作湖州做网站需要机吗
  • 网站开发 技术问题网站开发seo
  • 安徽网站建设哪家有哔哩哔哩网站开发图片
  • 专业推广公司哪家好seo工作内容和薪资
  • 东莞企业做网站人才网网站方案
  • 游戏网站排行手机网站模版 优帮云
  • 网站竞争案例公司注册资金实缴和认缴的区别
  • 免费优化推广网站的软件河南映天建设网站
  • 自由策划网站建设网页设计图片大小规范
  • 做网站网站的代理算网站罪吗学院网站建设工作总结
  • 教育行业网站开发许昌网站建设科技公司
  • 网站什么也没动怎么不收录啦网站会员注册怎么做
  • 模板手机网站建设做网站流程、
  • 网站建设资金请示网站建设的快乐
  • 做原型的网站wordpress 用户api
  • 网站做宣传长沙装修公司咨询
  • 淘宝客优惠卷网站怎么做的西安企业网站搭建
  • 高级网站开发工程师证书wordpress用户功能增强
  • 公司让我做网站wordpress模板改适应手机
  • 长沙网站快速排名提升网站首页模板管理