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 相关文章推荐
json 实例详细说明教程
Oct 31 Javascript
vs2003 js文件编码问题的解决方法
Mar 20 Javascript
JavaScript常用脚本汇总(三)
Mar 04 Javascript
javascript入门教程基础篇
Nov 16 Javascript
jQuery 特性操作详解及实例代码
Sep 29 Javascript
AngularJS自定义控件实例详解
Dec 13 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
Feb 13 Javascript
微信小程序中的swiper组件详解
Apr 14 Javascript
vue移动端监听滚动条高度的实现方法
Sep 03 Javascript
vue实现自定义日期组件功能的实例代码
Nov 06 Javascript
webpack4.x CommonJS模块化浅析
Nov 09 Javascript
你应该了解的JavaScript Array.map()五种用途小结
Nov 14 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安装为Apache DSO
2006/10/09 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
Laravel 5.0 发布 新版本特性详解
2015/02/10 PHP
js原生态函数中使用jQuery中的 $(this)无效的解决方法
2011/05/25 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
js闭包用法实例详解
2016/12/13 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
Python列表推导式的使用方法
2013/11/21 Python
用Python制作简单的钢琴程序的教程
2015/04/01 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
乡镇组织委员个人整改措施
2014/09/16 职场文书
2014年文秘工作总结
2014/11/25 职场文书
超市员工管理制度
2015/08/06 职场文书
比较node.js和Deno
2021/04/27 Javascript
教你怎么用Python操作MySql数据库
2021/05/31 Python
swagger如何返回map字段注释
2021/07/03 Java/Android
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
JS数组去重详情
2021/11/07 Javascript