vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据

在vue项目中组件间相互传值或者后台获取的数据需要供多个组件使用的情况很多的话,有必要考虑引入vuex来管理这些凌乱的状态,今天这边博文用来记录这一整个的过程,后台api接口是使用webpack-server模拟的接口,这个前面的文章中有提到,需要的可以去翻阅。

整个的流程是在组件的created中提交dispatch,然后通过action调用一个封装好的axios然后再触发mutation来提交状态改变state中的数据,然后在组件的计算属性中获取state的数据并渲染在页面上

首先新需要在项目中安装vuex:

运行命令 npm install vuex --save-dev

在项目的入口js文件main.js中

import store from './store/index'

并将store挂载到vue上

newVue({

el:'#app',

router,

store,

template:'',

render: (createElement)=>createElement(App)

})


然后看下整个store的目录结构,modules文件夹用来将不同功能也面的状态分成模块,index.js文件夹是store的入口文件,types文件夹是定义常量mutation的文件夹

整个vuex的目录结构如下:

这里我新建了文件夹fetch用来编写所有的axios处理和axios封装

在fetch文件夹下新建api.js文件:

import axiosfrom'axios'export function fetch(url,params) {returnnewPromise((resolve, reject) =>{

axios.post(url,params)

.then(response=>{

alert('Api--ok');

resolve(response.data);

})

.catch((error) =>{

console.log(error)

reject(error)

})

})

}

exportdefault{//获取我的页面的后台数据mineBaseMsgApi() {

alert('进入api.js')returnfetch('/api/getBoardList');

}

}

在store的入口文件index.js中:

import Vuefrom'vue'import Vuexfrom'vuex'import minefrom'./modules/mine';

Vue.use(Vuex);

exportdefaultnewVuex.Store({

modules: {

mine

}

});

在你需要请求后台数据并想使用vuex的组件中的created分发第一个dispatch:

created() {this.$store.dispatch('getMineBaseApi');

}

然后在store/modules下的对应模块js文件中,这里我使用的mine.js文件中编写state、action和mutation

import apifrom'./../../fetch/api';

import*astypesfrom'./../types.js';conststate ={

getMineBaseMsg: {

errno:1,

msg: {}

}

}constactions ={

getMineBaseApi({commit}) {

alert('进入action');

api.mineBaseMsgApi()

.then(res=>{

alert('action中调用封装后的axios成功');

console.log('action中调用封装后的axios成功')

commit(types.GET_BASE_API, res)

})

}

}constgetters ={

getMineBaseMsg: state=>state.getMineBaseMsg

}constmutations ={

[types.GET_BASE_API](state, res) {

alert('进入mutation');

state.getMineBaseMsg={ ...state.getMineBaseMsg, msg: res.data.msg }

alert('进入mutations修改state成功');

}

}

exportdefault{

state,

actions,

getters,

mutations

}

然后在想取回state的组件中使用mapGetters获取state:

import { mapGetters }from'vuex';

exportdefault{

...

computed: {

...mapGetters(['getMineBaseMsg'])

},

...

然后在控制台查看把:

getter和mutation都已经成功了,同时我在提交state的整个过程都添加了alert,大家可以看看整个流程是如何走的;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 安装 npm npm install vuex --save 在一个模块化的打包系统中,您必须显式地通过Vue.u...
    萧玄辞阅读 2,974评论 0 7
  • Vuex是什么? Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件...
    萧玄辞阅读 3,176评论 0 6
  • *vue官网:https://cn.vuejs.org/vue-router官网:https://router.v...
    日落perfe阅读 2,478评论 0 10
  • Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应...
    白水螺丝阅读 4,698评论 7 61
  • 记得我刚毕业参加第一份工作的时候,有一年母亲节,部门同事都在讨论送妈妈什么礼物,刚好我们领导认识一个做珠宝玉石的朋...
    马会会阅读 261评论 1 1