Vue.js vuex ajax调用和几个组件

Vue.js vuex ajax调用和几个组件,vue.js,vuex,Vue.js,Vuex,我想知道使用vuex和多个组件共享此调用数据的ajax调用的最佳实践是什么 我是否将该调用的loading、success和error属性存储在存储中,以便它一直填充到组件?我不知道最好的办法是什么。我也不想从所有组件中调用ajax,因为这会破坏一次调用ajax的目的 现在,我正在存储上面提到的内容: new Vuex.Store({ state: { persons: { data: null, loading: fa

我想知道使用vuex和多个组件共享此调用数据的ajax调用的最佳实践是什么

我是否将该调用的loading、success和error属性存储在存储中,以便它一直填充到组件?我不知道最好的办法是什么。我也不想从所有组件中调用ajax,因为这会破坏一次调用ajax的目的

现在,我正在存储上面提到的内容:

new Vuex.Store({
    state: {
        persons: {
             data: null,
             loading: false,
             error: null
        }
    }
});
我对每个api调用都这样做,然后将其存储在那里。有更好的方法吗?

介绍了一些实现ajax调用和更新vuex状态的模式。我个人同意作者的观点,即将ajax调用作为操作移动到vuex存储的方法3,因为正如本文所指出的,它将状态和表示逻辑解耦。这也很有帮助,因为您可以从您的操作中返回一个承诺,以了解状态何时可以发生变化

文章中的代码示例:

store = new Vuex.Store({
    state: {
        message: ''
    },
    mutations: {
        updateMessage(state, payload) {
            state.message = payload
        }
    },
    actions: {
        refreshMessage(context) {
            return new Promise((resolve) => {
                this.$http.get('...').then((response) => {
                    context.commit('updateMessage', response.data.message);
                    resolve();
                });
            });
        }
    }
});

Vue.component('my-component', {
    template: '<div>{{ message }}</div>',
    methods: {
        refreshMessage() {
            this.$store.dispatch('refeshMessage').then(() => {
            // do stuff
        });
        }
    },
    computed: {
        message: { return this.$store.state.message; }
    }
});
store=新的Vuex.store({
声明:{
消息:“”
},
突变:{
更新消息(状态、有效负载){
state.message=有效负载
}
},
行动:{
刷新消息(上下文){
返回新承诺((解决)=>{
这是.http.get(“…”)。然后((响应)=>{
commit('updateMessage',response.data.message);
解决();
});
});
}
}
});
Vue.component(“我的组件”{
模板:“{message}}”,
方法:{
刷新消息(){
这是.$store.dispatch('refeshMessage')。然后(()=>{
//做事
});
}
},
计算:{
消息:{返回此。$store.state.message;}
}
});
正如您在这里看到的,ajax调用被封装为vuex操作。在依赖于来自ajax调用的数据的组件中,该组件可以执行操作(此.$store.dispatch('refreshMessage')。然后…),该操作将进行ajax调用并更新存储中的数据。由于您的组件已经具有依赖于存储区数据的被动属性,因此一旦存储区有了新数据,它将自动更新