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


Posted in Javascript onJuly 31, 2020

在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上

new Vue({
 el: '#app',
 router,
 store,
 template: '<App/>',
 render: (createElement) => createElement(App)
})

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

整个vuex 的目录结构如下:

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

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

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

import axios from 'axios'

export function fetch(url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, params)
      .then(response => {
         alert('Api--ok');
        resolve(response.data);
      })
      .catch((error) => {
       console.log(error)
        reject(error)
      })
  })
}

export default {
 // 获取我的页面的后台数据
 mineBaseMsgApi() {
   alert('进入api.js')
  return fetch('/api/getBoardList');
 }
}

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

import Vue from 'vue'
import Vuex from 'vuex'

import mine from './modules/mine';

Vue.use(Vuex);

export default new Vuex.Store({
 modules: {
  mine
 }
});

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

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

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

import api from './../../fetch/api';
import * as types from './../types.js';

const state = {
 getMineBaseMsg: {
  errno: 1,
  msg: {}
 }
}

const actions = {
 getMineBaseApi({commit}) {
  alert('进入action');
  api.mineBaseMsgApi()
  .then(res => {
    alert('action中调用封装后的axios成功');
    console.log('action中调用封装后的axios成功')
    commit(types.GET_BASE_API, res)
  })
 }
}

const getters = {
 getMineBaseMsg: state => state.getMineBaseMsg
}

const mutations = {
 [types.GET_BASE_API](state, res) {
  alert('进入mutation');
  state.getMineBaseMsg = { ...state.getMineBaseMsg, msg: res.data.msg }
  alert('进入mutations修改state成功');
 }
}

export default {
 state,
 actions,
 getters,
 mutations
}

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

import { mapGetters } from 'vuex';

export default {
 ...
 computed: {
  ...mapGetters([
   'getMineBaseMsg'
  ])
 },
 ...   
}

然后在控制台查看把:

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

以上这篇vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
添加到收藏夹代码(兼容几乎所有的浏览器)
Jan 09 Javascript
javascript笔记 String类replace函数的一些事
Sep 22 Javascript
JSON 数字排序多字段排序介绍
Sep 18 Javascript
JS如何判断json是否为空
Jul 06 Javascript
详解JS中的attribute属性
Apr 25 Javascript
JavaScript之DOM_动力节点Java学院整理
Jul 03 Javascript
JavaScript之promise_动力节点Java学院整理
Jul 03 Javascript
JS 实现banner图片轮播效果(鼠标事件)
Aug 04 Javascript
Vue Element使用icon图标教程详解(第三方)
Feb 07 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
Aug 07 Javascript
ES6 Map结构的应用实例分析
Jun 26 Javascript
vue flex 布局实现div均分自动换行的示例代码
Aug 05 Javascript
vue抽出组件并传值实例
Jul 31 #Javascript
Vue通过Blob对象实现导出Excel功能示例代码
Jul 31 #Javascript
Vue.js中使用Vuex实现组件数据共享案例
Jul 31 #Javascript
原生JS实现记忆翻牌游戏
Jul 31 #Javascript
js实现跳一跳小游戏
Jul 31 #Javascript
js实现翻牌小游戏
Jul 31 #Javascript
Vue 请求传公共参数的操作
Jul 31 #Javascript
You might like
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
谈谈JavaScript中的垃圾回收机制
2020/09/17 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
《Python学习手册》学习总结
2018/01/17 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
对Python 内建函数和保留字详解
2018/10/15 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
Python测试模块doctest使用解析
2019/08/10 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
Python itertools.product方法代码实例
2020/03/27 Python
python中os.remove()用法及注意事项
2021/01/31 Python
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
课程设计的心得体会
2014/09/03 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
2014年销售部工作总结
2014/12/01 职场文书
就业导师推荐信范文
2015/03/27 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
2019年度开业庆典祝福语大全!
2019/07/05 职场文书
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技