博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vuex基础到模块化
阅读量:6331 次
发布时间:2019-06-22

本文共 4500 字,大约阅读时间需要 15 分钟。

什么是Vuex

在Vue中,多组件的开发给我们带来了很多的方便,但同时当项目规模变大的时候,多个组件间的数据通信和状态管理就显得难以维护。而Vuex即将状态管理,可以简单理解为全局变量。Vuex采用和Redux类似的单向数据流的方式来管理数据。用户界面负责触发动作(Action)进而改变对应状态(State),从而反映到视图(View)上。

数据流转图

基本使用

vuex简单计数器示例:

{

{ count }}

//触发methods中的increment方法

复制代码

const store = new Vuex.Store({  state: {    count: 0  },  mutations: {  	increment: state => state.count++,  //此处使用箭头函数    decrement: state => state.count--  }})new Vue({  el: '#app',  computed: {    count () {	    return store.state.count    }  },  methods: {    increment () {      store.commit('increment')    //触发mutations中的increment状态变更    },    decrement () {    	store.commit('decrement')    }  }})复制代码

触发流程:

前端调用方法 --> methods中的对应方法 --> store.commit触发 mutations中的相应方法 --> state中的状态属性被改变
效果:

模块化使用

main.js

import Vue from 'vue'import VueRouter from 'vue-router'import ElementUI from 'element-ui'import 'element-ui/lib/theme-default/index.css'import App from './App'import axios from './http.js'import echarts from 'echarts'//导入store入口文件import store from './store/index'Vue.use(VueRouter)Vue.use(ElementUI)/*vue全局引入外部插件的方法,通过this.$axios*/Vue.prototype.$axios = axios;Vue.prototype.$echarts = echarts;Vue.config.productionTip = falselet vm = new Vue({	el: '#app',	store,	template: '
', components: { App }})复制代码

store/index.js

import Vue from 'vue'import Vuex from 'vuex'//导入vuex的store模块import moduleOne from './modules/storeModuleOne'   // 引入 axiosimport axios from '../http'Vue.use(Vuex)// 从环境变量判断当前运行模式// const debug = process.env.NODE_ENV !== 'production'const store =  new Vuex.Store({	// strict:debug,                         //设置运行模式	// plugin:debug ? [createLogger()] : []  //调试模式则加入日志插件    modules:{        moduleOne    },    //state相当于data    state: {        //作者名称        author: 'FANE',        address:'江苏南京',        school:['北大','清华'],        version:'版本一',        loginInfo:{            name:'Zhang',            age:'24'        },        count: 1,        data:['www']    },    //getters相当于computed    getters:{        author:state => state.author,        loginInfo:state => state.loginInfo,        // address:state => state.address,        // version:state => state.version,        // school:state => state.school,        count:state => state.count,        data:state => state.data,    },        mutations: {        increment:state => state.count++,        decrement:state => state.count--,        dataReceive(state,res){            state.data = res        }    },    //actions相当于methods(或者MVC中的Controller),用于操作mutations实现对state中状态的读取,但是actions不会直接对状态做修改    actions:{        decrement (context) {            context.commit('decrement')        },        getBarData(context){            //原来使用axios时是通过全局定义Vue.prototype.$axios = axios;用this.$axios.get()方法调用;            //但是在store中的this并不是一个Vue实例,此处直接导入axios调用即可            axios.get('/api/getBarData').then(res => {                context.commit('dataReceive',res.data.data.title)            })                .catch(e => {                    console.warn('error','getBarData查询异常')                    console.log(e)   //打印错误状态                })        }    }})// 导出store实例对象export default store复制代码

store的子文件moduleOne.js

import Vue from 'vue'const state = {    liu:'jingna',    wei:['yu','ning']}const mutations = {    changeName(state,res){        state.liu = res    }}const actions = {    changeNameA(context){        context.commit('changeName','南京')    }}export default {    state,mutations,actions}复制代码

axios的http.js导入处理——作用为axios的请求拦截和处理
vuex与axios结合的方案来源于,WiseWrong的博客

import axios from 'axios'// 添加请求拦截器axios.interceptors.request.use(function (config) {    // 在发送请求之前做些什么    console.log("axios请求拦截")    console.log(config)    return config;  }, function (error) {    // 对请求错误做些什么    return Promise.reject(error);  });// 添加响应拦截器axios.interceptors.response.use(function (response) {    // 对响应数据做点什么    console.log("axios响应拦截")    return response;  }, function (error) {    // 对响应错误做点什么    return Promise.reject(error);  });export default axios;复制代码

vue页面

复制代码

转载地址:http://ykboa.baihongyu.com/

你可能感兴趣的文章
iOS开发NSLayoutConstraint代码自动布局
查看>>
正则表达式
查看>>
mysql [ERROR] Can't create IP socket: Permission denied
查看>>
PBRT笔记(4)——颜色和辐射度
查看>>
CustomView的手势缩放总结
查看>>
linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹
查看>>
CentOS yum安装mysql
查看>>
OceanBase笔记1:代码规范
查看>>
[Algorithms] Longest Increasing Subsequence
查看>>
MAC下GitHub命令操作
查看>>
springboot之filter/listener/servlet
查看>>
uGUI练习 开篇
查看>>
【springboot】【redis】springboot+redis实现发布订阅功能,实现redis的消息队列的功能...
查看>>
关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)
查看>>
用浮动IP实现高可用性,待续
查看>>
Strom(0.9.3)配置
查看>>
Python之Paramiko、前端之html学习_Day14
查看>>
HDU 3836 Equivalent Sets
查看>>
深入理解JVM读书笔记思维导图
查看>>
String字符串位置移动
查看>>