Vuex不会检测动作或突变,但可以很好地检测Getter

Vuex doesn#39;t detect actions or mutations but detects getters fine(Vuex不会检测动作或突变,但可以很好地检测Getter)
本文介绍了Vuex不会检测动作或突变,但可以很好地检测Getter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的Vue应用中设置Vuex。

app.js

require('./bootstrap');

window.Vue = require('vue').default;

import Vuex from "vuex";
Vue.use(Vuex);
import storeData from "./store";

const store = new Vuex.Store(
   storeData
)

Vue.component('home', require('./components/Home.vue').default);


const app = new Vue({
    el: '#app',
    store
});

store.js

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

export const state = {
    members: [],
};

export const getters = {
    members: state => () => {
        return state.members;
    }
};

export const actions = {
    async getMembers({ commit, state, dispatch }){
        const res = await this.$axios.get('getMembers');
        const { data } = await res;
        commit('setMembers', data);
    }   
};

export const mutations = {
    setMembers(state, members){
        state.members = members;
    },
};

export default new Vuex.Store({
  state,
  getters,
  actions,
  mutations
});

Home.vue

<template>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Home</div>

                    <div class="card-body">
                        {{ members }}
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
import { mapGetters, mapActions, mapMutations } from "vuex";
    export default {
        mounted() {
            this.getMembers();
        },
        computed: {
        ...mapGetters({
            members: 'members'
        })
        },
        methods: {
            ...mapActions({
            getMembers: 'getMembers'
        })
        }
    }
</script>

主页上显示了成员对问题的看法。我在开发人员工具中看到它是一个空数组,如果我将它设置为其他值,它将显示它。然而,如果我试图进行突变,它不会检测到操作或突变。例如,该操作会显示:未知操作类型:getMembers&知道这可能是什么原因吗?

推荐答案

使用new Vuex.Store对存储区进行了两次初始化,第二次向构造函数提供了存储区实例,这导致了错误。

从store.js导出的是存储,而不是存储数据

可以是:

const store = new Vuex.Store({
  state,
  getters,
  actions,
  mutations
});

export default store;

那么很明显,它是从store.js中导出的存储实例。

Vue.use(Vuex)也被调用两次,这可能不会导致问题,除了一个警告,因为Vue插件通常包含防止多次初始化的保护措施。Store.js不需要包含它,在应用程序入口点初始化插件是很常见的。

这是一个潜在的错误:

require('./bootstrap');

window.Vue = require('vue').default;

import Vuex from "vuex";
...

根据规范提升导入,此行为取决于设置,但不应期望此代码将按此顺序进行计算。

需要为:

import './bootstrap';
import Vue from "vue";    
import Vuex from "vuex";
import store from "./store";

window.Vue = Vue;
...

这篇关于Vuex不会检测动作或突变,但可以很好地检测Getter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)