引言

Vue是现在前端最流行的框架之一,作为前端开发人员应该要熟练的掌握它,如果你是打算学习Vue的开发流程,那么来吧,明哥带你快速上手、带你飞!
即使你并非前端开发人员,对前端的开发流程进行一定的了解也是很有必要的,谁也不确定公司以后会不会让我做前端去,做些简单的实例既不需要花费很多时间,也可以提高自己的自信和成就感,所以跟着明哥走,没有错,来吧!

导航

✪  Vue开发实例目录总索引
上一篇【13】axios和mockjs的安装与使用
下一篇【15】动态路由

概述

做vue项目的时候, store状态管理器可以帮助我们完成一些数据的存储和管理,通俗理解是存储在store里的都是全局变量,可以通过方法提交更新,其他页面和组件也会同步更新,拿到最新的值。

方法 描述
state 状态树:定义需要管理的数组、对象、字符
getters 类似计算属性,当需要从store的state中派生出一些状态,就需要使用getter,getter会接受state作为第一个参数,而getter的返回值会根据它的依赖缓存起来,只有getter中的依赖值发生改变才回重新计算。
mutation 更改store中state状态的唯一方法就是提交mutation。每个mutation都有一个字符串类型的事件和一个回调函数,我们需要改变state的值就要在回调函数中改变。我们要执行这个回调函数,那么我们需要执行一个相应的调用方法:store.commit
  1. Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到更新。
  2. 不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交(commit)mutation。

安装配置和简单使用

  1. 安装vuex支持

npm install vuex --save

  1. 在src下创建store文件夹,建立store.js --> 在store.js中引入vue 和 vuex
  1. 引入vue 和 vuex,并使用Vue.use(Vuex)【很重要】
  2. 创建state和mutations
  3. export导出Vuex.Store 实例
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state ={username: '明世隐',
}
const mutations ={setUser (state, name) {state.username = name},
}
export default new Vuex.Store({state,mutations
})
  1. 在main.js配置,这样就可以全局引入了,省的每个要使用的页面单独在引入。
  1. import store from ‘./store/store.js’;
  2. 在new Vue 引入
import Vue from 'vue'
import App from './App.vue'
import VueRouter from "vue-router"
import ElementUI from 'element-ui';
import router from "./router";
import 'element-ui/lib/theme-chalk/index.css';
import '@/assets/css/global.css';import axios from 'axios';
Vue.prototype.$axios =axios;import './mock/mock.js';
import store from './store/store.js';Vue.use(ElementUI).use(VueRouter);Vue.config.productionTip = falsenew Vue({router,store,render: h => h(App),
}).$mount('#app')
  1. 页面代码

语法:$store.state.XXX(XXX属性名)

<template><div><h1>{{$store.state.username}}</h1></div>
</template>
  1. 控制台报错
Uncaught TypeError: Object(...) is not a functionat resetStoreState (webpack-internal:///../node_modules/vuex/dist/vuex.esm-browser.js:153:70)at new Store (webpack-internal:///../node_modules/vuex/dist/vuex.esm-browser.js:945:3)at eval (webpack-internal:///./src/store/store.js:15:64)at Module../src/store/store.js (app.js:1478:1)at __webpack_require__ (app.js:854:30)at fn (app.js:151:20)at eval (webpack-internal:///./src/main.js:23:74)at Module../src/main.js (app.js:1442:1)at __webpack_require__ (app.js:854:30)at fn (app.js:151:20)

原因:
Vue 2.x和Vuex 4.x版本不对应
Vue 3 匹配 Vuex 4 ,Vue 2 匹配 Vuex 3
解决办法:
卸载原来安装的vuex4

npm uninstall vuex --save

安装vuex3

npm install vuex@3 --save

  1. 页面效果

提交变更

使用方法 commit ,语法如下:

this.$store.commit(‘提交方法名’,数据);

  1. 在store.js中一个状态字段 userState 和提交的方法 setUserState
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state ={username: '明世隐',userState:0
}
const mutations ={setUser (state, name) {state.username = name},setUserState (state, data) {state.userState +=data},
}
export default new Vuex.Store({state,mutations
})
  1. 页面添加一个显示字段和按钮
<template><div><h1>{{$store.state.username}}</h1>数据状态:{{$store.state.userState}}<el-button @click="addState">状态+1</el-button></div>
</template>
  1. 页面添加按钮更新的方法
addState(){this.$store.commit('setUserState',1);
}
  1. 页面效果

getters使用

对数据进行修饰,比如上例中的用户状态,我们假设如下:
0 :无效
1 :1级
2 :2级

  1. 在store.js 增加getters进行数据的修饰并导出getters
const getters = {getUserState (state) {let data;if(state.userState==0){data='无效'}else{data = state.userState+'级'}return data;}
}
export default new Vuex.Store({state,mutations,getters
})
  1. 页面上使用这个getters
计算数据状态:{{$store.getters.getUserState}}
  1. 页面效果

在其他页面(组件)中显示

直接在footer 页面加入显示即可

数据状态:{{$store.state.userState}}

更新state中的状态时都会同步更新:

modules多模块

  1. 在store下创建文件夹 module ,并建立两个文件 moduleA.js moduleB.js

moduleA.js 定义state 的username 为module_a_user

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({state:{username:"module_a_user"},mutations:{},getters:{}
})

moduleB.js 定义state 的username 为module_b_user

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({state:{username:"module_b_user"},mutations:{},getters:{}
})
  1. 在store.js中创建modules并导出

别忘记加入导入语句
import moduleA from “./module/moduleA”;
import moduleB from “./module/moduleB”;

const modules = {a:moduleA,b:moduleB
}
export default new Vuex.Store({state,mutations,getters,modules
})
  1. 页面中使用这两个模块的代码

语法:$store.state.模块名.字段名

module用户a:{{$store.state.a.username}}
<br>
module用户b:{{$store.state.b.username}}
  1. 页面效果

小结

这节总结了“ Vue状态管理store ”,希望能对大家有所帮助,请各位小伙伴帮忙 【点赞】+【收藏】+ 【评论区打卡】, 如果有兴趣跟小明哥一起学习Java和前端的,【关注一波】不迷路哦。
请到文章下方帮忙【一键三连】谢谢哈!

导航

✪  Vue开发实例目录总索引
上一篇【13】axios和mockjs的安装与使用
下一篇【15】动态路由

热门专栏推荐

【1】Java小游戏(俄罗斯方块、植物大战僵尸等)
【2】JavaWeb项目实战(图书管理、宿舍管理等)
【3】JavaScript精彩实例(飞机大战、验证码等)
【4】Java小白入门200例
【5】从零学Java、趣学Java
【6】IDEA从零到精通

Vue开发实例(14)之Vue状态管理store相关推荐

  1. Vue开发实例(15)之动态路由

    引言 Vue是现在前端最流行的框架之一,作为前端开发人员应该要熟练的掌握它,如果你是打算学习Vue的开发流程,那么来吧,明哥带你快速上手.带你飞! 即使你并非前端开发人员,对前端的开发流程进行一定的了 ...

  2. Vue开发实例(13)之axios和mockjs的安装与使用

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  3. Vue开发实例(11)之el-menu实现左侧菜单导航

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  4. 3.vue开发实例演示

    个人博客:http://blog.kunpw.cn/ vue开发实例演示 1.解剖初始化模板 1.1 vue文件 如图所示,对于一个新建的vue文件而言,其中标签分为三个部分: template标签: ...

  5. Vue开发实例(12)之实现动态左侧菜单导航

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  6. Vue开发实例(05)之搭建项目主页面头部、导航、主体等页面布局

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  7. Vue开发实例(17)之实现用户列表

    引言 Vue是现在前端最流行的框架之一,作为前端开发人员应该要熟练的掌握它,如果你是打算学习Vue的开发流程,那么来吧,明哥带你快速上手.带你飞! 即使你并非前端开发人员,对前端的开发流程进行一定的了 ...

  8. Vue开发实例(09)之按钮的使用

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  9. Vue开发实例(20)之实现登录功能

    引言 Vue是现在前端最流行的框架之一,作为前端开发人员应该要熟练的掌握它,如果你是打算学习Vue的开发流程,那么来吧,明哥带你快速上手.带你飞! 即使你并非前端开发人员,对前端的开发流程进行一定的了 ...

最新文章

  1. 【计算机类】大学生计算机专业电子书汇总
  2. java 打开sql数据库_idea 使用Java连接SQL Server数据库教程
  3. Hadoop生态Zookeeper安装
  4. DBN【深度置信网络】【受限玻尔兹曼机深层】详解
  5. 《技术的潜能:商业颠覆、创新与执行》一一2.12决心、愿望和耐力
  6. 透明怎么弄_玻璃球里的花纹是怎么弄进去的?谜终于解开了!
  7. 基于CNN的中文文本分类算法(可应用于垃圾文本过滤、情感分析等场景)
  8. awk命令详解+示例
  9. linux qgis编译安装,QGIS安装
  10. adobe 不适应 Max to分屏软件的修改
  11. 相机标定—— 张正友标定法(1)
  12. linux装中文字库,对linux安装中文字体库
  13. 异硫氰酸荧光素标记磁性四氧化三铁纳米粒FITC-Hyd-PEG-Fe3O4|近红外染料CY7.5标记纳米二氧化硅CY7.5-SiO2 NPs
  14. div做表格 html5,div+css制作表格
  15. 微信公众号授权登录之二(tp5)
  16. 像素(px)与厘米的关系
  17. 基于 GitLab CI 的前端工程CI/CD实践
  18. url中的20%、22%、26%、7B%、%7D、28%、29%怎么解析还原成真实的字符
  19. 计算机网络常见的面试题(牛客网总结)
  20. GitHub使用(IDEA)

热门文章

  1. 操作系统---IO控制方式
  2. 运维,放过监控 - 也放过自己吧
  3. Verilog-LFSR线性反馈移位寄存器
  4. unity中RenderTexture显示图片中如何带透明通道
  5. 2015年超强倒车入库技巧!完整图片解说
  6. 00后干一年跳槽就20K,测试老油条表示真怕被这个“卷王”干掉····
  7. flask 数据库操作入门教程(一把梭)
  8. win7环境下苍南社保网上申报***设置
  9. 天呐!java从键盘给数组赋值
  10. 绝对令你着迷的《创世纪银河传说》!