1. vuex作用:

1.1 是一个专为 vue.js 应用程序开发的状态管理模式,集中式存储管理应用的所有组件的状态,以此实现非父子甚至不同组件之间的高效通信
1.2 缓存后端数据,提高用户体验

2. 什么时候vuex比较适用?

如果构建一个中大型单页应用,考虑到如何更好地在组件外部管理状态,vuex 就成为了自然而然的选择。但是如果您的应用够简单,不打算开发大型单页应用的话,最好还是不要使用 vuex,因为这时候使用 vuex 可能是繁琐冗余的。

3. vuex原理:

vuex的状态管理分为同步状态和异步状态,都是在单向数据流理念下通过vue 的官方调试工具 devtools extension进行状态管理,所以最好严格遵循数据流向:
同步状态:Mutation====>State
异步状态:Actions====>Mutation====>State

4、vuex的几种常见安装及使用步骤:

4.1 安装vuex:

npm:
npm i vuex --save
yarn:
yarn add vuex
cdn直接引入:
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.js"></script>

4.2检查项目下的main.js是否引入了store:

项目生成时就有的,但是最好检查一下:

import store from './store' //默认指向store/index.js

4.3 开始编译项目下src/store/index.js:

5、vuex的五大核心用法:

(1) state:单一状态树 ,每个应用将仅仅包含一个 store 实例,存放需要公共管理的状态(变量名)
(2) getters:可以从store 中的 state 中派生出一些状态,getters的返回值会根据 它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,类似于vue的计算属性
(3) actions:异步状态管理下的开始,存方法
(4) mutations:同步状态下的开始以及异步状态下的中转,存方法。更改 vuex 的 store 中的状态的唯一方法是提交 mutation。
(5) modules :管理模块,当多人合作开发时,避免每个人在同一个index.js文件修改,可把index.js中的state、mutations、getters、actions分为几个模块,在自己的模块文件中编译,最后将所有的模块名引入在Module中。(分为几个子模块后状态共享的用法也会不同,下面会详细介绍)
注意:只是分为几个模块,但是一个项目中store里始终只能有唯一的index.js
以下是本人开发过程中的index.js,其中注释部分有详细介绍数据流中传参相关语法:

import Vue from 'vue'
import Vuex from 'vuex'
import axios from '@/util/http'Vue.use(Vuex)export default new Vuex.Store({state: {isTabbarShow: true,cinemaList: [],cityName: "北京",cityId: "110100"},// 处理同步状态+异步状态下的中转mutations: {show(state) {state.isTabbarShow = true},hide(state) {state.isTabbarShow = false},//第一个参数默认为state,第二个参数是Action传过来的参数setCinemaList(state, data) {//把数据传到statestate.cinemaList = data;},setCityName(state, data) {state.cityName = data},setCityId(state, data) {state.cityId = data}},// 处理异步请求actions: {//store是形参名,vuex会自动传实参:store实例对象,第二个参数为组件中共享状态时传的参数getCinemaAction(store, id) {axios.request({url: `/gateway?cityId=${id}&ticketFlag=1&k=9719361`,headers: {'X-Host': 'mall.film-ticket.cinema.list'}}).then(res => {console.log(res.data)//提交中转到mutationsstore.commit("setCinemaList", res.data.data.cinemas)})},},//对上面全局状态进行数据处理,类似于vue的计算属性getters: {defaultList(state) {return state.cinemaList.slice(0, 5)}},modules: {}
})

6、在任意组件中实现状态共享的常见的一些语法用法(与上面相对应):

共享state/getters中的状态:this.$store.state/getters+在state中的状态名

this.$store.state.cinemaList
this.$store.getters.defaultList

共享actions中的状态: this.$store.dispatch(‘xxx’,需要传的参数)

this.$store.dispatch("getCinemaAction",this.cityId)

共享mutations中的状态: this.$store.commit(‘xxx’,需要传的参数)

this.$store.commit("hide")//调用mutations中的hide()

7、辅助函数mapState、mapActions、mapMutation、mapGetters用法:

上面组件中共享状态用法是不是觉得很麻烦????这四个辅助函数很高兴为您做简化服务>>>>>>>>
7.1 在组件中引入辅助函数:

import { mapState,mapGetters} from 'vuex'//需要哪个里面的状态就引入哪个

7.2 用展开运算符引入所需的状态名并开始简化使用,简化用法:不管是state、mutations还是其他两个里面的,直接this.状态名

computed: {...mapState(["cinemaList"]),...mapGetters(["defaultList"]),SdefaultList(){return this.defaultList}},
methods: {...mapMutations(["show","hide","setCinemaList"]),handleCity(){this.setCinemaList([]);this.hide()}},

不知道智慧的大噶有没有发现展开的位置有要求呢????
好吧,我等不及了,现在揭晓:














注意!!!!!!!!!!!!!!!!!!!!!!!
一定要记得:根据他们中存的是状态(变量)还是方法
mapState、mapGetters一般在计算属性中展开
mapActions、mapMutation在methods中展开

8、index.js模块化:

当多人合作开发时,避免每个人在同一个index.js文件修改,可把index.js中的state、mutations、getters、actions分为几个模块,在自己的模块文件中编译,最后将所有的模块名引入在Module中。一般按组件分:
8.1 在store下建立modules文件夹,添加所需的js文件(所需的模块)
8.2 在对应的模块下编译需要共享的状态:

import http from '@/util/http'const module = {namespaced: true, //开通命名空间state: {},actions: {},mutations: {},getters: {}export default module

8.3 在index.js文件的modules下引入所有模块:

import Vue from 'vue'
import Vuex from 'vuex'
//引入模块
import cinema from './module/cinemaModule'
import tabbar from './module/tabbarshowModule'
import city from './module/cityModule'Vue.use(Vuex)const store = new Vuex.Store({state: {},mutations:{},actions:{},getters:{},modules:{//添加模块名cinema,tabbar,city}
})
export default store

8.4 在组件中使用:
需要哪个模块的状态就前面加上模块名

computed: {//只有这里有改变...mapState("cinema",["cinemaList"]),...mapState("city",["cityName","cityId"]),SdefaultList(){return this.defaultList}},
methods: {...mapMutations(["show","hide","setCinemaList"]),handleCity(){this.setCinemaList([]);this.hide()}},

9、Vuex缓存数据永久化:

vuex每次从后台获取的缓存数据虽然能够减少数据加载次数,但是每次刷新就清空了,但我们实际开发中是需要它永久保存的,所以
9.1 安装

//nmp
npm install --save vuex-persistedstate
//yarn
yarn add vuex-persistedstate
//cdn引入
<script src="https://unpkg.com/vuex-persistedstate/dist/vuex-persistedstate.umd.js"></script>

欲知更详细点我就知道

9.2 index.js中添加import和plugins

//引入vuex-persistedstate
import createPersistedState from "vuex-persistedstate";const store = new Vuex.Store({//添加plugins: [createPersistedState({reducer(data){return {city:data.city//需要永久化的模块,默认为全部永久化}}})],state: {},mutations:{},actions:{},getters:{},modules:{cinema,tabbar,city}
})
export default store

vuex的基本介绍和使用相关推荐

  1. Vue全家桶 Vuex的详细介绍

    文章目录 Vuex状态管理 认识状态管理 Vuex的基本使用

  2. 状态管理模式 - vuex 的使用介绍

    前言 大家好,不知道大家在用 vue 进行开发过程中有没有遇到这样一种场景,就是有些时候一些数据是一种通用的共享数据(比如登录信息),那么这类数据在各个组件模块中可能都会用到,如果每个组件中都去后台重 ...

  3. 「Vue」vuex 的使用

    vuex 概述 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 利用 vuex 集中管理数 ...

  4. Vuex、axios以及跨域请求处理

    一.Vuex 1.介绍 vuex是一个专门为Vue.js设计的集中式状态管理架构. 对于状态,我们把它理解为在data中需要共享给其他组件使用的部分数据. Vuex和单纯的全局对象有以下不同:1. V ...

  5. Vue简单用法目录总结 以及 前端基础总结传送门:

    Vue官方网址:https://cn.vuejs.org/ Vue 第三方组件:Element:http://element-cn.eleme.io/#/zh-CN Vue 基础指令以及自定义指令:h ...

  6. getter方法的作用 vuex_Vuex入门篇——基本使用

    开始前,请尝试理解下面这张图的关系,或许有助于你理解下面的有关Vuex的使用介绍. Vuex使用方法 题题题1.安装   如果你已经开始了一个项目,我们直接运行命令安装Vuex npm install ...

  7. Vue.js组件化开发实践

    Vue.js组件化开发实践 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了一下的内容.首先会对使用Vue进行开发的一 ...

  8. VUE.JS 组件化开发实践

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模 ...

  9. Vue 组件间通信六种方式

    前言 组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.一般来说,组件可以有以下几种关系: 如上图所示,A 和 B.B 和 C.B 和 D ...

最新文章

  1. 2022-2028年中国轻型客车行业投资分析及前景预测报告
  2. Java多线程的同步机制(synchronized)
  3. JavaScript的语言组成
  4. 025_CSS框模型概述
  5. 怎么用BarTender批量打印标签
  6. 重建控制文件的案例(RESETLOGS模式和NORESETLOGS模式)
  7. 计算机应知应会培训班,应知应会培训、测试方案(报省里)
  8. java .insert_Java StringBuffer.insert 插入字符
  9. Windows程序设计:使用VS2010创建窗口程序
  10. HP LaserJet 5200L PCL6 打印速度慢解决方案
  11. Calendar获取上个月第一天和最后一天,上周第一天和最后一天
  12. 鲜枣课堂之深入浅出数字信号处理
  13. 【沃顿商学院学习笔记】领导力——Business Impact:03商业如何驱动影响力的案例Some Cases
  14. 大家好!我是刘伦斯,一个喜欢书法、摄影的计算机童鞋
  15. 【附源码】计算机毕业设计JAVA东理咨询交流论坛
  16. Nginx之父被抓!员工“接私活儿”到底合不合法?
  17. Android - weight,patch图片,shape图形,android开发入门书籍推荐
  18. 计算小分子之间的RMSD
  19. 使用 FreeBSD 的原因
  20. 个人作业2--英语学习APP案例分析

热门文章

  1. c语言随机数rand函数一探究竟
  2. 华为云ubuntu更新阿里源
  3. c语言sleep函数源码,带你了解C语言中的Sleep函数(附代码)
  4. 泛函分析 03.05 内积空间与Hilbert空间 - 可分的Hilbert空间
  5. css怎么自定义字体样式
  6. 爬取一周天气获取24小时温度+数据可视化
  7. Android模仿淘宝语音输入条形动画,录音动画自定义View
  8. poc weblogic 漏洞利用_Weblogic 漏洞利用总结
  9. 全方位深入理解JavaScript面向对象
  10. 关于iOS 8 HTML5性能测试:苹果有多爱HTML5?