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 option删除代码集合
Nov 12 Javascript
几个比较经典常用的jQuery小技巧
Mar 01 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
Jun 28 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
Apr 19 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
Aug 14 Javascript
javascript设计模式之解释器模式详解
Jun 05 Javascript
在一个页面重复使用一个js函数的方法详解
Dec 26 Javascript
javascript实现Emrips反质数枚举的示例代码
Dec 06 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
Sep 13 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
Apr 28 Javascript
JS实现返回上一页并刷新页面的方法分析
Jul 16 Javascript
layui监听select变化,以及设置radio选中的方法
Sep 24 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添加MySQL数据记录代码
2008/06/07 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
javascript parseInt与Number函数的区别
2010/01/21 Javascript
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
2011/07/26 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
js实现日历的简单算法
2017/01/24 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
Python中实现常量(Const)功能
2015/01/28 Python
Python利用ansible分发处理任务
2015/08/04 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Python调用C++程序的方法详解
2017/01/24 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
python利用tkinter实现屏保
2019/07/30 Python
如何通过命令行进入python
2020/07/06 Python
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
业务经理的岗位职责
2013/11/16 职场文书
社区文化建设方案
2014/05/02 职场文书
演讲稿开场白台词
2014/08/25 职场文书
公司规章制度范本
2015/08/03 职场文书
正确使用MySQL update语句
2021/05/26 MySQL
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers