javascript - vuex getter中访问Nuxt插件功能

标签 javascript plugins vuex nuxt.js

我正在开始使用 nuxtjs 和 vuex。我刚刚遇到从 getter 访问组合注入(inject)插件函数的问题。例如:

nuxt.config.js

...
plugins: [
  '~/plugins/myplugin.js'  
  ],
...

~/plugins/myplugin.js

function doSomething(string) {
        console.log("done something: " + string)
    }

export default ({ app }, inject) => {
    inject('doSomething', (string) => doSomething(string))
  }

~/store/index.js

export const actions = {
    someAction({commit}) {
        this.$doSomething("Called from Action") // works
    }
}

export const getters = {
    someGetter: state => {
        this.$doSomething("Called from Getter") // throws error
    }
}

该代码适用于 someAction 操作,但调用 getter someGetter 将导致错误提示 this 未定义。

nuxt 文档仅展示了从 mutations 和 actions 访问注入(inject)的插件函数的示例,但没有明确提及 getter 无法访问插件函数。这在 nuxt 中甚至是可能的,还是有充分的理由不在 getter 中调用插件方法?任何帮助表示赞赏。

最佳答案

您不应该尝试在 getter 中do_something。 setter/getter 仅用于从商店的状态中导出状态。关键是您不必单独存储和保持最新的派生状态。例如,你有一个任务列表,你有一个完成任务的 getter,而不是一个单独的已完成任务列表:completedTasks: state => state.tasks.filter(task => task.completed) .

Mutations 应该只用于改变你商店的状态。

最后,在操作中,您可以与您需要的任何东西进行交互,例如某处的网络服务器 API 或 this.$do_something,然后触发突变以根据结果更新状态。

所以我想说 Nuxt 在这里做的事情是有道理的,注入(inject) Action 而不是 setter/getter 。

关于javascript - vuex getter中访问Nuxt插件功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61593710/

相关文章:

javascript - 如何使用 jQuery 创建和删除 HTML 隐藏字段?

javascript - { ...obj1, obj2 } 到底做什么

javascript - 将 onhover 更改为 onclick

javascript - 工具提示在带有 svg 的 bootstrap 5 beta1 中不起作用?

javascript - 通过 Ajax 调用获取格式化 html 内容的问题

java - 编译在运行时引用当前程序类的Java代码

java - 在 Bukkit config.yml 中为字符串添加颜色代码翻译

maven-2 - Maven Grails插件问题

vue.js - 在使用 Vue + Vuex 渲染之前无法在状态中获取对象的属性

vue.js - vuex 模块还需要命名空间吗?