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函数中onmousedown和onclick的区别和联系探讨
May 19 Javascript
使用js操作css实现js改变背景图片示例
Mar 10 Javascript
小议JavaScript中Generator和Iterator的使用
Jul 29 Javascript
jquery插件uploadify实现带进度条的文件批量上传
Dec 13 Javascript
js获取所有checkbox的值的简单实例
May 30 Javascript
JS本地刷新返回上一页代码
Jul 25 Javascript
微信小程序中顶部导航栏的实现代码
Mar 30 Javascript
详解Vue 开发模式下跨域问题
Jun 06 Javascript
js实现关闭网页出现是否离开提示
Dec 07 Javascript
Express下采用bcryptjs进行密码加密的方法
Feb 07 Javascript
区别JavaScript函数声明与变量声明
Sep 12 Javascript
layui table去掉右侧滑动条的实现方法
Sep 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删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
代码生成器 document.write()
2007/04/15 Javascript
利用javascript实现一些常用软件的下载导航
2009/08/03 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
2015/05/28 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
浅谈js script标签中的预解析
2016/12/30 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
Python数据可视化:泊松分布详解
2019/12/07 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
python Zmail模块简介与使用示例
2020/12/19 Python
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
三八红旗集体先进事迹材料
2014/05/22 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
如何利用python实现列表嵌套字典取值
2022/06/10 Python