将模块重构为单独的文件时,Vuex 4模块不起作用

Posted

技术标签:

【中文标题】将模块重构为单独的文件时,Vuex 4模块不起作用【英文标题】:Vuex 4 modules not working when refactoring modules to seprate files 【发布时间】:2021-11-28 10:45:39 【问题描述】:

我一直在学习 vuex4,在那里我在 main.js 中编写了所有状态、动作、getter...

现在我已经了解了模块,并尝试将我的代码重构为单独文件中的模块。一切正常,除了一个 v-for 循环,其中数字应该出现但不出现。当应用程序上的“历史”下的数字发生变化时,该数字应该会出现。

我正在使用 counter.js 中的突变“addToCounter”和“minToCounter”更新历史数组

History.vue(这是 v-for 循环不起作用的地方)

  <div class="container">
    <h4>History</h4>
    <div class="flex">
      <p
        v-for="(number,index) in history"
        :key="index"
        :class="activeIndexes(parseInt(value)).includes(index) && 'bold'"
      >
       number
      </p>
    </div>
    <input
      type="text"
      placeholder="search by index"
      v-model="value"
    >
  </div>
</template>

<script>
import mapState, mapGetters from "vuex";

export default 
  data()
    return
      value: 0,
    
  ,
  computed: 
    ...mapState(['history']),
    ...mapGetters(['activeIndexes']),
  

</script>

<style>...</style>

counter.js(模块保存在modules/counter.js中)

import axios from "axios";

const state = 
        counter: 0,
        history: [0],
;
const mutations = 
    addToCounter(state, payload)
        state.counter = state.counter + payload;
        state.history.push(state.counter)
    ,
    minToCounter(state, payload)
        state.counter = state.counter - payload;
        state.history.push(state.counter)
    
;
const actions = 
    //async je takrt k zahtevamo nek http request npr od api-ja spodnji primer:
    async addRandomNumber(context) 
        let data = await axios.get('https://www.random.org/integers/?num=1&min=-1000&max=1000&col=1&base=10&format=plain&rnd=new');
        context.commit("addToCounter",data.data);
    
;
const getters = 
    activeIndexes: (state) => (payload) => 
        let indexes = [];
        state.history.forEach((number, index) => 
            if(number === payload) 
                indexes.push(index)
            
        );
        return indexes
    
;

export default 
    state,mutations,actions,getters

main.js

import  createApp  from 'vue'
import  createStore  from 'vuex';
import counter from "./modules/counter";

import App from './App.vue'

const store = createStore(
    modules: 
        counter: counter,
    
)

createApp(App).use(store).mount('#app')

【问题讨论】:

你在你的开发者工具中看到状态是否更新了吗? @JonathanAkweteyOkine 是的。 prnt.sc/1vbprhw(所有这些数字都应显示在历史记录下) 【参考方案1】:

想通了:)。

在 History.vue 中

我变了:

computed: 
…mapState([‘history’]), → …mapState([‘counter’]) //as module name is counter
…mapGetters([‘activeIndexes’]),

然后为 v-for

v-for="(number,index) in history" → v-for="(number,index) in counter.history"

【讨论】:

以上是关于将模块重构为单独的文件时,Vuex 4模块不起作用的主要内容,如果未能解决你的问题,请参考以下文章

将 gatsby-node 文件重构为单独的文件不起作用

导入自定义 axios 实例时 Vuex 模块不起作用

Vuex 可重用模块模式。使用状态功能不起作用

尝试从 Vuex 模块调度操作不起作用。 [vuex] 未知动作类型

NuxtServerInit 在 Vuex 模块模式下不起作用 - Nuxt.js

注册模块中的vuex未知突变类型