【问题标题】:How to make library globally available in Composition API?如何使库在 Composition API 中全局可用?
【发布时间】:2021-12-16 00:57:46
【问题描述】:

我基本上在每个组件中都需要vuex store,并想知道是否有办法省略:

import {useStore} from "vuex";

const store = useStore()

从所有组件中自动导入它,这样我就可以像这样使用它:

store.state.image = "..."

现在我已经在一个单独的 store.js 文件中导入了store

import {createStore} from "vuex";

const store = createStore({
    state() {
        return {
            image: sessionStorage.image || ""
        }
    }
})

export default store

并在app.js注册:

require('./bootstrap');

import {createApp} from 'vue';
import app from "../vue/app";
import store from "./store";

createApp(app)
    .use(store)
    .mount("#app");

我试过了:

createApp(app)
    .component('store', store)
    .mount("#app");

但它说type anystore object 不能注册为component

【问题讨论】:

  • 这是一个错误,component('store', store)。您不能将其用作组件,因为它不是组件。可以直接导入store
  • @EstusFlask 是的,但我正在寻找一种方法让它在没有import的情况下可用@
  • 不会有什么好办法。依赖项应该在现代 JS 中显式导入。您可以做的事情是不要写useStore 部分并直接导入store。这不是问题,因为IDE 可以处理自动导入并且使用store 不需要键入import
  • 顺便说一句 ctx.root.$store 可能可用,但不鼓励使用它,我相信它是无类型的,以防你使用 TS。

标签: vue.js vuex vuejs3 vue-composition-api


【解决方案1】:

既然您使用的是useStore,那么您一定使用过setup

export default defineComponent({
    setup() {
        const store = useStore();
    }
})

此声明仅适用于setup。因为setup 中没有this,所以这是获取store 的另一种方式。

正如您所说,您想在全球范围内使用它。但是只要在setup,你必须要导入这个方法。即使您想使用全局方法。

要访问setup 挂钩中的存储,您可以调用useStore 函数。这相当于使用 Option API 在组件中检索this.$store[vuex composition api guide]

所以你可以在任何其他地方使用this.$store.state.image,比如vue2

the simplest store

【讨论】:

  • 组合 API 中没有 this 组件实例。建议不要使用组合 API 并使用过时的选项 API,对吧?
  • @EstusFlask 是的,你是对的。所以他每次都要导入useStore方法。除非他使用Option API
  • Composition API 有太多的好处,不使用它。我希望他们将来能以某种方式实施。
  • @ArturMüllerRomanov 是的,我同意你的看法。但我认为现阶段解决起来并不容易。我什至认为setup 中的返回语法不友好。使用<script setup>也有很多不便之处。最后,您的问题看起来更像是一个问题,它需要一个全新的解决方案
  • @jeremyjone 出于好奇,使用脚本设置有什么缺点?
猜你喜欢
  • 2021-02-09
  • 2021-11-10
  • 2021-04-03
  • 2023-02-17
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 2020-08-25
  • 2022-01-13
相关资源
最近更新 更多