如何从 javascript 文件(而不是 vue 组件)获取 vuex 状态

2024-02-06

我正在使用 vuex (2.1.1) 并让事情在 vue 单文件组件中工作。然而,为了避免 vue 单文件组件中出现太多问题,我将一些函数移至utils.js我将其导入到 vue 文件中的模块。在这个utils.js我想阅读 vuex 状态。我怎样才能做到这一点?因为看起来用 getters 等接近状态是假设你是在 vue 组件中工作,或者不是?

我尝试过了import state from '../store/modules/myvuexmodule'然后参考state.mystateproperty但它总是给出“未定义”,而在 vue-devtools 中我可以看到 state 属性确实有正确的值。

我目前的估计是,这根本不是“要走的路”,因为 js 文件中的 state.property 值不会是反应性的,因此不会更新或其他什么,但也许有人可以确认/证明我错了。


可以将商店作为外部js文件中的对象进行访问,我还添加了一个测试来演示状态的变化。

这是外部js文件:

import { store } from '../store/store'

export function getAuth () {
  return store.state.authorization.AUTH_STATE
}

状态模块:

import * as NameSpace from '../NameSpace'
/*
   Import everything in NameSpace.js as an object.
   call that object NameSpace.
   NameSpace exports const strings.
*/

import { ParseService } from '../../Services/parse'

const state = {
  [NameSpace.AUTH_STATE]: {
    auth: {},
    error: null
  }
}

const getters = {
  [NameSpace.AUTH_GETTER]: state => {
    return state[NameSpace.AUTH_STATE]
  }
}

const mutations = {
  [NameSpace.AUTH_MUTATION]: (state, payload) => {
    state[NameSpace.AUTH_STATE] = payload
  }
}

const actions = {
  [NameSpace.ASYNC_AUTH_ACTION]: ({ commit }, payload) => {
    ParseService.login(payload.username, payload.password)
      .then((user) => {
        commit(NameSpace.AUTH_MUTATION, {auth: user, error: null})
      })
      .catch((error) => {
        commit(NameSpace.AUTH_MUTATION, {auth: [], error: error})
      })
  }

export default {
  state,
  getters,
  mutations,
  actions
}

商店:

import Vue from 'vue'
import Vuex from 'vuex'
import authorization from './modules/authorization'

Vue.use(Vuex)

export const store = new Vuex.Store({
  modules: {         
    authorization    
  }                  
})                   

到目前为止,我所做的就是创建一个 js 文件,该文件导出一个返回函数AUTH_STATE的财产authorization状态变量。

用于测试的组件:

<template lang="html">
    <label class="login-label" for="username">Username
        <input class="login-input-field" type="text" name="username" v-model="username">
    </label>
    <label class="login-label" for="password" style="margin-top">Password
         <input class="login-input-field" type="password" name="username" v-model="password">
    </label>
    <button class="login-submit-btn primary-green-bg" type="button" @click="login(username, password)">Login</button>
</template>

<script>
import { mapActions, mapGetters } from 'vuex'
import * as NameSpace from '../../store/NameSpace'
import { getAuth } from '../../Services/test'

export default {
  data () {
    return {
      username: '',
      password: ''
    }
  },
  computed: {
    ...mapGetters({
      authStateObject: NameSpace.AUTH_GETTER
    }),
    authState () {
      return this.authStateObject.auth
    },
    authError () {
      return this.authStateObject.error
    }
  },
  watch: {
    authError () {
        console.log('watch: ', getAuth()) // ------------------------- [3]
      }
    },
    authState () {
      if (this.authState.sessionToken) {
        console.log('watch: ', getAuth()) // ------------------------- [2]
      }
    },
  methods: {
    ...mapActions({
      authorize: NameSpace.ASYNC_AUTH_ACTION
    }),
    login (username, password) {
      this.authorize({username, password})
      console.log(getAuth())             // ---------------------------[1]
    }
  }
}
</script>

单击该按钮默认状态是登录到控制台。我的案例中的操作会导致 api 调用,如果用户名 - 密码组合有记录,则会导致状态更改。

成功案例会导致控制台显示在authStatewatch,导入的函数可以打印对状态所做的更改。

同样,在出现故障的情况下,手表会打开authError将显示对状态所做的更改

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 javascript 文件(而不是 vue 组件)获取 vuex 状态 的相关文章

  • 如何删除除任何特定 id 之外的元素

    假设有一个父 id 其中包含许多元素 我想删除除一个元素之外的所有元素 ex parent id children not id n remove
  • Jquery 悬停卡

    我在用着http designwithpc com Plugins Hovercard http designwithpc com Plugins Hovercard 但我不知道如何在悬停卡上声明 var 每个工作描述都有自己的 ID 当悬
  • Firebase,只得到新的孩子[重复]

    这个问题在这里已经有答案了 var firebase new Firebase firebaseRef on child added function snapshot 这将接收所有元素 有没有办法在创建新的 Firebase 引用时不接收
  • VueJS 中数据无法正确显示

    我的 VueJS 代码有一个小问题 在 输出 压缩的 GS1 数字链接 URI 部分中 When there is no result it should have nothing display like this I have remo
  • .push() 将多个对象放入 JavaScript 数组中返回“未定义”

    当我将项目添加到beats数组然后console log用户时 我得到了数组中正确的项目数 但是当我检查 length 时 我总是得到 1 尝试调用索引总是会给我 未定义 如下所示 Tom beats 1 我想我错过了一些明显的东西 但这让
  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 在渲染组件之前从 api 获取数据

    我在渲染页面之前发送 2 个 api 请求 const Profile template profile attributes null photos data function return attributes Profile attr
  • Number.IsNaN() 比 isNaN() 更糟糕吗

    Soooooo isNaNJavaScript 显然被破坏了 比如 isNaN isNaN isNaN true isNaN false isNaN 0 返回 false 当它们看起来都是 不是数字 在 ECMAScript 6 中 草案包
  • 如何在网站上使用 svg 元素制作块的屏幕截图?

    我在网站上创建了一个构造函数 其本质是将所选元素及其颜色 svg中的元素 添加到访问者选择的背景和背景颜色 png中的背景 中 然后必须单击 保存 结果 按钮并仅执行工作区的屏幕截图 我写了这个脚本 但它需要屏幕截图 但只有背景 并忽略选定
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • Highcharts jQuery 渲染问题 - 所有浏览器

    我在尝试使用构建堆积柱形图时遇到了一个奇怪的问题高图表 http www highcharts com 当图表呈现时 在您调整浏览器大小之前 不会显示列无论如何 导致图表重绘 我认为 图表的其余部分显示 轴 标题等 但不显示列本身 我在 I
  • 有没有办法使用 ko.observableArray 作为地图?

    有没有办法使用ko observableArray http knockoutjs com documentation observableArrays html像地图 字典一样 例如 var arr ko observableArray
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • Flot 库将 y 轴设置为最小值 0 和最大值 24

    如何将 y 轴设置在 0 到 24 的范围内 这是我的代码 j plot j placeholder d1 xaxis mode time min new Date 2010 11 01 getTime max new Date 2011
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供

随机推荐

  • javascript中获取小数点后的值

    我有一个 JavaScript 号码 12 1542 我想要这个字符串中的新字符串 12 1542 60 我怎么才能得到它 谢谢 你可以使用模运算符 https developer mozilla org en JavaScript Ref
  • SDK.DIR丢失?安卓更新项目?

    当我这样做时 我收到此错误 ant release sdk dir is missing Make sure to generate local properties using android update project or to i
  • jsTree - 渲染优化|具有 2000 个节点的超长渲染

    我正在使用 jsTree 1 0 rc3 以及通过 AJAX 加载数据的选项 并且在通过它加载大约 2000 个子节点时遇到问题 虽然服务器会在几秒钟内响应 但 jsTree 仅需要大约 40 秒才能在浏览器 chrome FF 中呈现结果
  • 使用Python下载Kaggle数据集

    我已经尝试下载kaggle dataset通过使用Python 但是我在使用时遇到了问题request方法和下载的输出 csv 文件是损坏的 html 文件 import requests The direct link to the Ka
  • Java 生成 RSA 密钥对并转换为 PEM - 但 OpenSSL 函数 PEM_read_bio_RSA_PUBKEY 返回 null

    我使用以下代码生成 RSA 密钥对并将其转换为 PEM 但是当我使用OpenSSL功能时PEM read bio RSA PUBKEY是返回null Java代码 public static RSAKeyPair creatKeyPair
  • 如何从数据子集中随机抽取并在 R 中引导统计测试

    我有一个包含两个变量的数据集 我希望统计测试它们在引导循环中是否相关 即使用 Spearman 的等级校正cor test 我的数据集中的大多数测量值都来自独立的样本单位 我们称之为植物单位 尽管有些测量值来自同一植物 为了处理伪复制问题
  • Azure ACS 是否像 Salesforce 一样支持 saml 2.0 IdP?

    我没有安装访问控制服务 ACS 但我在一些在线视频演示中看到 Salesforce 不在可用的预安装身份提供商列表中 Salesforce 可以配置为 IdP 使用标准 SAML 2 0 我可以设置 ACS 以便使用 Salesforce
  • 如何将组内的第一个值与每个后续值进行比较,直到满足条件

    所以我有一个一般结构如下的数据框 数据框 rownum group date 1 a 2021 05 01 2 a 2021 05 02 3 a 2021 05 03 4 b 2021 05 15 5 b 2021 05 17 6 b 20
  • Scala 中并行集合的效率/可扩展性(图)

    因此 我一直在 Scala 中使用并行集合来处理我正在开发的图形项目 我已经定义了图形类的基础知识 它目前正在使用scala collection mutable HashMap关键在哪里Int其值为ListBuffer Int 邻接表 编
  • OOD / OOP 练习曲 / 代码练习

    我已经在网上搜索了一段时间了 我正在寻找用于 OOD 实践 以及一些内部 TDD 研讨会 的小样本练习 如果有一个地方可以满足这一需求 请指出它 并关闭此问题 限制条件 与语言无关的现实世界问题 小 最多需要一到两个小时才能解决的问题 或者
  • 无法在Java / C++中为外部应用程序设置always-on-top

    我正在寻找解决方案 使外部应用程序 不是像记事本或 calc exe 这样的 Windows 应用程序 在按下 Java GUI 中的按钮后始终保持在最上面 我在 C 中使用此代码来获取桌面上所有打开的窗口 并将其进程 ID PID 与发送
  • 可更新视图 - SQL Server 2008

    关于可更新数据库视图的问题 我正在阅读有关该主题的一些 MSDN 文档 并且遇到以下限制 任何修改 包括 UPDATE INSERT 和 DELETE 语句 都必须仅引用一个基表中的列 我只是想确保我理解该限制 我想在我的几个媒体评论项目中
  • 多边形中的点

    我正在尝试解决一些 SPOJ 问题https www spoj pl problems FSHEEP https www spoj pl problems FSHEEP 我们必须找出点是否在多边形内部 正如我们所看到的 它不是凸多边形 问题
  • 如何更改pairs()的轴位置?

    默认情况下 pairs 将轴放在图的所有边上 在边之间交替 但是 我将数据集之间的相关性放在上三角形中 所以我想像这样调整轴位置 我需要设置哪些参数 您可以自定义配对功能 如果你看一下代码 就会发现轴是在 2 个嵌套的 for 循环内绘制的
  • 为什么 RGB 使用 6 个十六进制数字?

    据我所知 RGB 用两个十六进制数字编码颜色 对应于红色 绿色和蓝色分量 例如 ff0000 是纯红色 据我了解 每个十六进制数字代表 0 15 之间的数字 或 4 位信息 但是如何用 32 位来表示每种颜色呢 为什么使用两位数字表示红色
  • 如何在 Mercurial 上 git reset --hard HEAD?

    我是一名 Git 用户 正在尝试使用 Mercurial 事情是这样的 我做了一个hg backout在我想恢复的变更集上 这创建了一个新头 因此 hg 指示我合并 我认为回到 默认 合并后 它告诉我我仍然必须提交 然后我注意到在解决合并中
  • Bash 脚本 - 变量内容作为命令运行

    我有一个 Perl 脚本 它给我一个定义的随机数列表 这些随机数对应于文件的行 接下来我想使用从文件中提取这些行sed bin bash count cat last queries txt wc l var perl test pl te
  • 如何通过拖动顶部的 div 来调整其大小?

    我想在拖动两个 div 之间的部分时调整 div 的大小 在搜索中我发现this http jsfiddle net gaby Bek9L 1779 但我不知道如何使这个水平而不是可用的垂直拖动 我的 div 看起来像 div div di
  • Install4j:有没有办法用包含占位符的文本覆盖欢迎消息?

    我需要覆盖install4j欢迎消息 其中包含我需要在运行时解析的占位符文本 将从属性文件中读取替换值 welcomeLabel3 Text 0 another text 1 无法向系统消息添加占位符 您必须指定整个消息 但是 您可以使用安
  • 如何从 javascript 文件(而不是 vue 组件)获取 vuex 状态

    我正在使用 vuex 2 1 1 并让事情在 vue 单文件组件中工作 然而 为了避免 vue 单文件组件中出现太多问题 我将一些函数移至utils js我将其导入到 vue 文件中的模块 在这个utils js我想阅读 vuex 状态 我