vue3源码分析之use(store)

本文深入分析Vue3的use()函数,解释其如何安装插件,特别是当与Vuex结合时如何调用store的install方法。通过源码解析,展示了如何在Vue应用中注册并使用Vuex store,以及在组件内部通过useStore()访问store。此外,还探讨了useStore()的实现原理和使用场景。
摘要由CSDN通过智能技术生成

vue3源码分析之use(store)

官方介绍use()

用来安装 Vue.js 插件。如果插件是一个对象,则它必须暴露一个 install 方法。如果插件本身是一个函数,则它将被视为 install 方法。

该 install 方法将以应用实例作为第一个参数被调用。传给 use 的其他 options 参数将作为后续参数传入该安装方法。

当在同一个插件上多次调用此方法时,该插件将仅安装一次。

use()相关源码

use(plugin, ...options) {
     // 是否已安装此插件
     if (installedPlugins.has(plugin)) {
         warn(`Plugin has already been applied to target app.`);
     }
     // 判断此插件的install属性是否为方法
     else if (plugin && shared.isFunction(plugin.install)) {
         // 安装此插件
         installedPlugins.add(plugin);
         plugin.install(app, ...options);
     }
     // 判断此插件是否为方法
     else if (shared.isFunction(plugin)) {
         // 安装此插件
         installedPlugins.add(plugin);
         plugin(app, ...options);
     }
    else {
        warn(`A plugin must either be a function or an object with an "install" ` +
            `function.`);
    }
    return app;
}

vuex相关源码

// 一般在main.js中调用app.use(store)方法是就好调用store的install方法
Store.prototype.install = function install (app, injectKey) {
  // 将当前store对象通过provide和key保存
  app.provide(injectKey || storeKey, this);
  // 将当前store对象设置为vue应用的全局属性
  app.config.globalProperties.$store = this;

  var useDevtools = this._devtools !== undefined
    ? this._devtools
    : false;

  if (useDevtools) {
    addDevtools(app, this);
  }
};

就是因为有下面这行代码,我们才可以vue组件中使用$store

app.config.globalProperties.$store = this;

当然这样只是可以通过this.$store,如果在setup组合api中就不能这样用了

还好vuex给我们提供了另一个便利的方法:useStore

useStore源码分析

useStore源码相对就比较简单了

function useStore (key) {
  if ( key === void 0 ) key = null;

  // 直接通过key获取通过provide保存的store对象
  return inject(key !== null ? key : storeKey)
}

如果通过use(store)安装组件的时候没有设置key,那么使用useStore()的时候也不用传任何参数

如果通过use(store, {injectKey: 'my_key'})安装组件的时候设置了key,那么使用useStore(‘my_key’)的时候也要设置injectKey

; while k <= length(t) && y(k,1) > Tmin && y(k,1) < Tmax % 上调的持续时间受限于温控区间上限 if S(k) == 0 % 电采暖设备被关闭在Vue.js中,使用vuex进行状态管理,可以通过`useStore`方法来获取store实例,用于在组了 break; end k = k+1; end tup(i) = t(k)-t(j); 件中进行状态读取和修改。 首先,在Vue组件中导入vuex: ```javascript import { useStore } k = j+1; while k <= length(t) && (y(k,1) < Tmin || y(k,1) from 'vuex' ``` 然后,在组件内部使用`useStore`方法获取store实例: ```javascript export default { setup() { const store = useStore() // ... } } ``` 在组件中使用store实例 > Tmax) % 下调的持续时间受限于温控区间下限 if S(k) == 1 %,例如获取和修改状态: ```javascript export default { setup() { const store = useStore() // 获取状态 电采暖设备被开启了 break; end k = k+1; end t const count = computed(() => store.state.count) // 修改状态 const increment = () => { store.commit('down(i) = t(k)-t(j); end ``` 5. 绘制功率变化曲线和可持续时间increment') } return { count, increment } } } ``` 上面的代码中,使用`曲线 ```matlab figure; subplot(2,1,1); plot(t/3600,P/1000,'b-',computed`函数获取store中的`count`状态,并使用`commit`方法触发`increment`这个mutation来修改状态。 t/3600,Prated/1000*ones(size(t)),'r--'); xlabel('时间(小时)'); ylabel('功注意:在使用`useStore`方法之前,需要确保已经在Vue应用中安装了vuex插件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bdawn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值