【问题标题】:electron-vue: store properties set but not rendering (VUEX)electron-vue:存储属性集但不渲染(VUEX)
【发布时间】:2019-02-19 20:48:06
【问题描述】:

伙计们,

我正在开始 electron-vuejs 桌面应用程序编程。我正在通过自学示例了解vuex 的工作原理。这是我的问题:

我有一个组件,它的模板是,

<template>                                                                       
<div id="wrapper">                                                             
 <main>                                                                       
  <div class="left-side">                                                    
    <span class="title">                                                     
      <h2>{{ titleName }}</h2>                                               
    </span>                                                                                                             
  </div>                                                                                                                                                 
 </main>                                                                      


对应的脚本部分如下,

<script>                                                                        
import { mapState } from 'vuex'                                                 

export default {                                                                
  name: 'game-page',                                                                                                                         
  computed: mapState([ 'titleName' ]) // map this.title to store.state.title    
}  
</script> 

我在store.js 中定义了titleName 属性,该属性位于./store/modules/store.js 中,其内容相同:

cont state = {
  titleName: 'Welcome to planet earth'
}

export default {
  state
}

一切正常:从某种意义上说,我在vue-devtools 控制台中没有收到任何错误/警告消息。我可以在控制台中看到store.js 中定义的vuex 状态。但是,我没有得到组件中呈现的标题。

我的理解是mapState从store中获取属性并绑定到组件中的变量。有了这样的理解,我没有定义gettr,但是,它似乎没有发生。

我一定是在做一些愚蠢的事情或遗漏了一些明显的事情。有人可以阐明如何解决/解决此问题吗? Vue-2.5.17 是我正在使用的。

编辑: 这就是我的index.js

import Vue from 'vue'
import Vuex from 'vuex'
import state from './modules/store.js'

Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    state
  },
  strict: process.env.NODE_ENV != 'production'
})

我的目录结构是,

src
├── index.ejs
├── main
│   ├── index.dev.js
│   └── index.js
└── renderer
    ├── App.vue
    ├── assets
    │   └── logo.png
    ├── components
    │   ├── StonePaperScissors
    │   │   └── GameStates.vue
    │   └── StonePaperScissors.vue
    ├── main.js
    ├── router
    │   └── index.js
    └── store
        ├── index.js
        ├── modules
            ├── index.js
            └── store.js

【问题讨论】:

  • 您的商店是否将titleName 加载为模块?
  • 我已添加,我如何在我的问题中加载商店。我是初学者。在适当的背景下,我不太了解您的问题。
  • 是的,在网上浏览和阅读后,它作为一个模块加载。

标签: javascript vue.js electron vuex


【解决方案1】:

首先,我认为您应该将模块命名为与 state 不同的名称,以避免将来混淆:)。我将在下面使用名称“your_module_name”。

import Vue from 'vue'
import Vuex from 'vuex'
import state from './modules/store.js'

Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    your_module_name: state
  },
  strict: process.env.NODE_ENV != 'production'
})

如果您将“子商店”加载为模块但没有命名空间,您可以使用另一个mapState 签名来解决问题:

computed: mapState({ titleName: state => state.your_module_name.titleName })

或者您可以将模块 命名空间 并使用它:

computed: mapState('your_module_name', ['titleName'])

是的,mapState 对非命名空间模块的行为并不明显。

【讨论】:

  • 谢谢@MaxSinev。你的建议我无法理解。可能,仍然做错了什么。我无法理解这条线在说什么({ titleName: state =&gt; state.your_module_name.titleName })。我假设这是将国家财产重新分配给另一个人。那state 代表什么? (现在我意识到我应该使用不同的命名)。再次感谢。
  • @RussellB 这一行说“将 your_module_name 状态的存储属性映射到 Vue 组件计算属性”,因此您可以像 this.titleName 一样使用它,并且如果存储属性发生更改,它将更改。 state 只是函数参数,它只是您商店的状态。顺便说一句,您可以自己映射存储属性而无需mapState,只需定义计算属性:titleName() { return this.$store.state.your_module_name.titleName }
  • 谢谢@MaxSinev。您使用mapState 定义计算属性的建议奏效了。但是,我很好奇为什么 mapState 辅助函数对我不起作用。我在商店定义文件中的export default 下尝试过namespaced: true。这也不起作用(遵循您对命名空间的建议)。这与Vuejs的版本有关吗?我正在使用 2.5.17。
  • @RussellB,这不是 Vue 版本问题,我可以为 jsfiddle 提供命名空间和非命名空间的 mapState 用法,检查 jsfiddle.net/maxsinev/mLude4kg 希望它会有所帮助:)
  • 感谢您的好意。在您的 jsfiddle 示例中,在模块导出下添加 namespaced: true 后,我终于成功了。现在一切正常,而且我理解了导出存储模块和命名空间的概念。
猜你喜欢
  • 2020-04-28
  • 2021-04-02
  • 2018-11-29
  • 2020-09-02
  • 2017-03-09
  • 2019-10-27
  • 2022-01-09
  • 2019-10-19
  • 2017-07-08
相关资源
最近更新 更多