1.vuex简介

Vuex是专门为Vue框架提供的。用来管理状态的模块。集中式管理状态数据。它管理的数据可以追踪变化。它是在多个组件之间共享数据的方案。

在store/index.js 定义仓库对象,需要对仓库对象进行配置

state:需要共享的数据

mutations:定义修改state的同步的方法

getters:定义对状态的过滤的操作,类似于组件的计算结果

actions:定义异步获取数据并且赋值给state

modules:状态模块化

2.vuex的定义

state:状态,需要共享的数据 不能直接修改,要么通过actions异步进行,要么通过mutations进行同步修改.

export default new Vuex.Store({state: {a:10,txt:"hello",arr:["yesterday once more","my heart will go on"],name:{firstName:"张",lastName:"三"},homeData:[]},
})

mutations:同步修改state的字段,里面都是一些函数,修改state字段里面的状态。

  mutations: {// 参数1state对象,参数2调用的时候传递的实参setNum(state,v){state.a = v},// 修改txt状态的函数setTxt(state,v){state.txt = v},setHomeData(state,v){state.homeData  = v}},

getters:类似于组件的计算结果,有返回值,过滤

  getters:{fullName(state){return state.name.firstName + state.name.lastName}},

actions: 异步获取数据并且通过同步修改的方法进行修改

actions: {// 参数1:仓库对象,参数2:可以传递一些参数queryData(store,v){return new Promise((resolve,reject)=>{axios.get("/api/test",{params:{page:1,pageSize:3}}).then(res=>{// 提交mutations方法,调用mutations中同步的方法store.commit("setHomeData",res.data.data)resolve()}).catch(err=>{reject(err)})})}},

3.vuex的使用

state:  

1.$store.state.字段

  <p>{{ $store.state.a }}</p>//store全局唯一的对象

2.先通过maoState进行映射到computed里面然后去使用

// 导入vuex的映射函数
import {mapState} from "vuex"
export default {computed:{
// 映射状态的时候可以在组件的计算结果中进行映射,通过扩展运算符把仓库的一个状态以数组的形式写在mapstate的参数里面...mapState(["a","txt","arr"])}
}

mutations:

1.this.$store.commit("setNum",传递的数据)

export default {methods: {f1() {// 第三种方法 通过commit提交方法进行提交修改this.$store.commit("setNum", 1000000);this.$store.commit("setTxt", "撒谎比");},},

2.先通过mapMutations进行映射到methods里面然后再去使用

import {mapMutations} from "vuex";
export default {methods: {
// 把mutations里面的修改方法映射到methods,相当于在本组件的methods中添加一些函数,可以在本组件使用...mapMutations(["setNum", "setTxt"]),f1() {// 第一种修改状态的方法// this.setNum(100)// this.setTxt("你好")// 第二种修改 通过仓库对象访问状态直接进行修改,不建议去使用// this.$store.state.a = 1000000},},

actions

1.this.$store.dispatch("action的名字",传递的数据)

export default {created(){// 仓库里面的异步 action调用this.$store.dispatch("queryData","123").then(res=>{console.log("数据请求成功");})},methods:{...mapActions(["queryData"])}
}

2.先通过mapActions进行映射到methods里面然后再去使用

import {mapActions,mapGetters} from "vuex"
export default {created(){this.queryData()},methods:{...mapActions(["queryData"])}
}

getters:

1.this.$store.getters("getter的名字",传递的数据)

  <p>{{$store.getters.getSkill}}访问根仓库的getters</p>

2.先通过mapGetters进行映射到computed里面然后再去使用

import { mapGetters } from "vuex";
export default {computed: {...mapGetters(["fullName"]),},
};

4.vuex子仓库的配置

// 导出的对象和仓库index.js的配置字段是一样的
export default{
// 模块化的仓库state是一个函数,像子组件中的一样state(){return{count:1,books:[],todos:[{id:1,text:"睡觉",done:false},{id:2,text:"吃饭",done:true},{id:3,text:"打豆豆",done:false},{id:4,text:"敲代码",done:true}]}},mutations:{setCount(state,v){state.count = v},setBooks(state,v){state.books = v}},getters:{//  过滤未完成的事件umcomplete:(state,getters,rootState)=>{// state:本模块的数据// getters:仓库中所有的getters,包括根仓库种getters,如果添加了命名空间getters就是本模块的getters// rootState 根仓库的状态return state.todos.filter(v=>{return !v.done})},// 过滤出已经完成的done:(state,getters,rootState)=>{return state.todos.filter(v=>{return v.done})}},
actions:{
async getData(store,v){
var result = await axios.get("/myApi/lurker/carguide/getwar
ningmsg?city=zz&type=2")
//把数据存入books,利用setBooks
store.commit("setBooks",result.data.data.content)}},modules:{},// 使用命名空间,以后本模块的数据需要通过指定命名空间进行访问// 在index.js的modules字段配置当中给模块进行空间的命名
namespaced:true
}

注意:模块仓库设置namespaced:true意为允许设置模块名,可以在根仓库种进行设置模块子仓库的名字,方便后面使用。在根仓库设置模块仓库的名代码如下:

先对子仓库进行导入,命名为moduleA
import moduleA from "./module.js"
//在根仓库的modules中设置名为a
modules: {a:moduleA}

5.使用子仓库

举例为根仓库下的a子仓库,在跟仓库命名为a

state

1 $store.dispatch("a/getData",100)

export default {created() {// 1直接使用.$store访问某块里面的action,dispatch函数的参数是"命名空间/action名字"this.$store.dispatch("a/getData",2)},
}

2先通过mapActions进行映射,...mapActions({b:"a/getData"})  this.b()

import {mapMutations} from "vuex"
export default {created() {this.b()},methods: {// mapActions()参数是一个对象 属性可以自定义属性,属性值模块中的action...mapActions({b:'a/getData'}),   },
}

getters:

1 $store.getters['a/done']

访问模块里面getter的时候 通过 $store.getters['a/getters']方式进行访问<p>{{$store.getters['a/done']}} 访问模块a里面的getters</p>

2 先通过mapGetters进行映射,...mapGetters({b:"a/umcomplete",c:"a/done"})

import {mapGetters} from "vuex"
export default {computed:{...mapGetters({b:"a/umcomplete",c:"a/done"})}
}

6.持久化存储

// 创建持久化存储对象
var vueLocal = new Vueinstance({// 存储方式,默认的是localStorage存储,可以修改成window.sessionStorage// storage:window.localStoragestorage:window.sessionStorage
})

记得在组件中书写使用插件,使用持久化存储插件

  // 使用插件,使用持久化存储插件plugins:[vueLocal.plugin]

关于Vuex的基本使用相关推荐

  1. 【实用】Angular中如何实现类似Vuex的全局变量状态变化功能?

    什么是Vuex?只需三分钟!只需创建一个vuex.js文件,让你马上学会使用Vuex,尽管Vuex是个鸡肋!(扔掉store文件夹和里面的index.getters.actions.mutations ...

  2. 只需三分钟!只需创建一个vuex.js文件,让你马上学会使用Vuex,尽管Vuex是个鸡肋!(扔掉store文件夹和里面的index、getters、actions、mutations等js文件吧!)

    前情提示:有一天,我要实现一个效果→点击某个按钮改变一个全局变量,并且要让绑定了该变量的所有位置异步渲染.我试过用一个全局的js文件存放该变量,该变量值虽然改变了,但是没有做到异步渲染.接着我用win ...

  3. vuex+vue-router拦截

    干就完了 项目中经常遇到这样一个场景,用户信息或者进行增删改的一些模块,需要根据用户是否登录,进行路由拦截,直接上代码 在store文件夹下的store.js中存放一个默认登录状态 /** store ...

  4. mutations vuex 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...

    前言 Vuex源码系列不知不觉已经到了第六篇.前置的五篇分别如下: 长篇连载:Vuex源码学习(一)功能梳理 长篇连载:Vuex源码学习(二)脉络梳理 作为一个Web前端,你知道Vuex的instal ...

  5. 在vue中使用vuex,修改state的值示例

    1. 安装 vuex npm install vuex -S 2.在目录下创建store文件 3. 在store.js编辑一个修改state的方法 然后在mian.js中全局引入 最后在组件中使用 这 ...

  6. vue之mapMutaions的使用 vuex中 action 用法示例 api.js的使用

    vue之mapMutations的使用 我们通过Mutation来改变store中的state,方法往往是在子组件中使用 this.$store.commit(); 来实现,但是这样的缺点是不容易查看 ...

  7. 基于Vue, Vuex 和 ElementUI 构建轻量单页Hexo主题Lite

    Hexo Theme Lite Keep Calm, Lite and Writing. light single page blog application theme, using Vue, Vu ...

  8. 详解 Vue Vuex 实践

    2019独角兽企业重金招聘Python工程师标准>>> 随着应用复杂度的增加,我们需要考虑如何进行应用的状态管理,将业务逻辑与界面交互相剥离,详细讨论参考笔者的2016-我的前端之路 ...

  9. vue总结 08状态管理vuex

    状态管理 类 Flux 状态管理的官方实现 由于状态零散地分布在许多组件和组件之间的交互中,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue 提供 vuex:我们有受到 Elm 启发的状态管理库 ...

  10. 使用vue2.0 vue-router vuex 模拟ios7操作

    其实你也可以,甚至做得更好... 首先看一下效果:用vue2.0实现SPA:模拟ios7操作 与 通讯录实现 github地址是:https://github.com/QRL909109/ios7 如 ...

最新文章

  1. mac os vmware 显卡驱动_【新机】华为Mate 40系列国行售价明天公布,饿了么可以买手机?| 干翻牙膏厂,AMD发布RX6000显卡...
  2. SEO优化如何让网站关键词排名稳如狗?
  3. Unity学习笔记3 简易2D横版RPG游戏制作(三)
  4. iOS开发 简述使用OCUnit对程序进行单元测试(UnitTest)
  5. 用python的五种方式_Python加载数据的5种不同方式(收藏)
  6. 平方根/立方根/根式
  7. 我比领导小15岁,互相有好感,为什么每次路过我办公室都叹气?
  8. 共享python代码模块
  9. java日期转换_java日期格式转换
  10. ubuntuQQ怎末安装
  11. 用人话说说希尔伯特空间??
  12. 怎么把Word转成PDF?转换方法很简单
  13. Comsumer的一些解释
  14. sqlitestudio和mysql_sqlitestudio怎么用 sqlitestudio使用方法图文详解
  15. 命令与征服3 凯恩之怒
  16. [codeforces 1379B] Dubious Cyrpto 公式推导
  17. 随机生成11位的电话号码
  18. Element Black 打造 NFT 新形式
  19. ubuntu 安装Qualcomm Atheros QCA9565 AR9565 无线网卡驱动并连接wifi网络
  20. 基于STM32的自动量程转换数字电压表设计--开发笔记

热门文章

  1. /proc/self/目录的意义
  2. ERNIE-Enhanced Language Representation with Informative Entities 阅读笔记
  3. 【VB数组小例】产生随机数并求和(附带添加图片用法)
  4. Java实现蓝桥杯二项式的系数规律
  5. ffmpeg v4l2集成分析
  6. 导入tkinter出错
  7. uni-app 退出app操作
  8. unbuntu16.4 64位安装spade+XMPP教程
  9. hdoj 4888 Redraw Beautiful Drawings 【最大流满流+唯一性判断】
  10. conventional-changelog 参数含义