如何通过 VueJS 中的操作访问商店?

Posted

技术标签:

【中文标题】如何通过 VueJS 中的操作访问商店?【英文标题】:How to get access to store from action in VueJS? 【发布时间】:2020-10-09 03:15:35 【问题描述】:

我正在使用 VueJS 和 Vuex。我通过这种方式将用户 ID 放入商店: vuex screenshot

我尝试将用户 ID 传递给 fetch,但 vuejs 返回错误

([Vue warn]: Error in created hook: "TypeError: this.$store is 未定义")

import  LOAD_APPOINTMENTS  from './types'

export default 
  loadProducts ( commit ) 
    var user = this.$store.state.user.userid
    fetch('api/appointments/' + user)
      .then((result) => 
        return result.json()
      )
      .then((appointments) => 
        commit(LOAD_APPOINTMENTS, appointments)
      )
      .catch(er => 
        console.log(er)
      )
  

【问题讨论】:

您如何/在哪里调用loadProducts 以及您提供的脚本的文件位置是什么?是某种.js 文件,它只是导出该函数吗? 我提供的脚本是 action.js,我在 App.Vue 中调用 loadProducts。这样: 此操作是user 模块还是存储根目录的一部分? @Phil 不,我有两个商店模块(用户和产品),模块用户将用户 ID 和用户名加载到 vuex 商店,产品从 api 获取并在 vuex 商店中为该用户加载产品跨度> 那么这个动作在哪个模块中? 【参考方案1】:

首先,在vuex 文件中引用存储时:

    context.state 而不是 this.$store.statecontext 代表所有 this.$store。所以,context.commitcontext.dispatch

其次,loadProducts 需要重写为action per docs。

第三,loadProducts 需要将context 合并为参数:

actions: 
  loadProducts (context) 
    ...
    context.commit(...)
    ...
  

正如@phil 在此线程中提到的,完整查看文档很重要,因为这个单一的答案将帮助您调试问题,但可能会出现更多问题(例如fetch错误、文件结构错误、组件/应用级别错误)。

【讨论】:

我喜欢反馈。如果这个问题有帮助或解决了问题,请点赞和/或接受:) 谢谢!但它不起作用。现在 Vuejs 返回上下文未定义 :(,抱歉是我的第一个 vuejs 应用 @feli 我建议你仔细阅读文档~vuex.vuejs.org/guide/actions.html#actions 仅供参考,应该是 loadProducts ( commit, state ) 或只是 loadProducts (context) 动作通过context 作为它们的第一个参数。这个context 具有属性stategetters 以及函数commitdispatch。它通常使用( state, getters, commit, dispatch ) 进行解构,只选择需要的属性

以上是关于如何通过 VueJS 中的操作访问商店?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决这个“http://localhost:8080”已被 CORS 策略阻止:对预检请求的响应未通过 vueJS 中的访问控制?

如何在 VueJS test-utils parentComponent 中模拟 Vuex 商店

如何使用模板语法访问 vuejs 中的父数据值

Vuejs,当我在商店模块中访问它时,为啥 this.$store.state.route.params.activityId 未定义

无法访问 vuejs 中的直接路由

如何使用 Vue 类组件访问 VueJS 3 和 Typescript 中的 HTML 引用?