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 相关文章推荐
JS子父窗口互相操作取值赋值的方法介绍
May 11 Javascript
setInterval与clearInterval的使用示例代码
Jan 28 Javascript
jquery 使用简明教程
Mar 05 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
Feb 28 Javascript
jQuery实现转动随机数抽奖效果的方法
May 21 Javascript
如何实现移动端浏览器不显示 pc 端的广告
Oct 15 Javascript
jQuery实现选项卡切换效果简单演示
Dec 09 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
Jan 05 Javascript
vue-hook-form使用详解
Apr 07 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
Jun 19 Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 Javascript
vue中defineProperty和Proxy的区别详解
Nov 30 Vue.js
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与ASP
2006/10/09 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
js类的静态属性和实例属性的理解
2009/10/01 Javascript
jquery tab插件制作实现代码
2010/06/22 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
js模拟微博发布消息
2017/02/23 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
python冒泡排序简单实现方法
2015/07/09 Python
简单了解Django模板的使用
2017/12/20 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
python绘制玫瑰的实现代码
2020/03/02 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
学习两会精神心得范文
2014/03/17 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
写好Python代码的几条重要技巧
2021/05/21 Python