vuex 状态管理 入门
vuex是什么
是一个对 数据状态实现集中式管理 的工具。可以解决组件之间传递的问题
多组件共享状态(变量),有一个数据好多组件都用
组件数大于2,任何一个组件修改其他组件都要改变
实现组件通信

Store
每一个 Vuex 应用的核心就是 store(仓库)。“store” 基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。
使用
- 安装
npm install vuex
- 创建store/index.js
a. vuex
impote vuex form 'vuex'
b. 创建store对象
const store = new Vuex.Store({
states:{
//全局变量
},
})
c. 导出store
export dafault store
d. 在main.js中引入
import store from "./store"
new Vue({
store
})
基本使用
- 获取全局状态值 this.$store.state.xxxx
- 修改全局状态
- 同步:mutations
- 异步 先action 再mutation
五大属性
1.state 数据
- 项目中共享的数据
state:{
name:'韩梅梅',
age:'16',
sex:0,
phone:1231312313
},
2.mutations : 同步方法
//修改state里数据的唯一途径
mutations:{
changeStateName(state,params){
// state 全局状态数据
//params 通过commit 触发传递的方法
console.log('修改state数据',state,params)
state.name=params.us
}
}
this.$store.commit("")//触发mutations的某一个方法,第一个参数是名字
3.actions :异步方法
- 当vuex中出现异步,应该放到actions中,非必须
- 可以将异步代码封装,统一管理异步
// 异步存放的地方 请求成功后发起 commit
actions:{
getNetName(context,params){
console.log('触发actions',arguments)
let {commit}=context
setTimeout(()=>{
let name='来自星星的名字'
commit('changeStateName',{us:name,ps:123})
},500)
}
}
this.$store.dispatch("") //发送一个请求,第二个参数是一个对象
4.getters : 派生属性
- 对全局状态下的数据进行管理,类似于vue中的计算属性
- 与state中数据进行关联,state数据改变,getter就会执行
// 做数据的处理
getters:{
doubleName(state){
return state.name+state.name
}
}
5.modules : 模块化
- state会被添加模块名字,其他的不会被加模块名
- namespace:true 命名空间,防止不同的模块有相同的名字
moudles:{
'a':{
state:{name:"zhangsan"},
getters:{}
},
'b':{
state:{age:18}
}
}
//不分模块写法:store.state.name
//分模块写法:store.a(模块名).state.name
a.js b.js 在index.js中引用
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
import A from './a'
import B from './b'
let store = new Vuex.Store({
modules:{A,B}
})
辅助函数
值类型:state,getters
可以通过辅助函数将值映射到内部的计算属性中
函数类型:actions,mutation;
通过辅助函数将函数映射到组件内部的方法里
映射:map ---------> mapState 、 mapGetters、 mapActions 、 mapMutations
使用
- mapState
import {mapState} from "vuex"
export default{
...mapState(['name'])
}
//页面中的
this.$store.state.name
//可以写成
name
- mapGetters
import {mapGetters} from "vuex"
export default{
...mapGetters(['name'])
}
//页面中的
this.$store.getters.name
//可以写成
name
- mapMutations
import {mapMutations} from "vuex"
export default{
...mapMutations(['name'])
changeName(){
this.name({'name1'})
//this.$store.commit('name')
}
}
//页面中的
this.$store.commit('name')
//可以写成
this.name('')
- mapActions
import {mapActions} from "vuex"
export default{
...mapActions(['name'])
changeName(){
this.name({'name1'})
//this.$store.dispatch('name')
}
}
//页面中的
this.$store.dispatch('name')
//可以写成
this.name('')
vuex 状态管理 入门的更多相关文章
- vuex状态管理-数据改变不刷新
困惑: 在页面初始化的时候,我提交到vuex状态管理,然后在获取的时候获取不到,我找到了出错的地点,并进行了修改,然后可以获取到状态 但是不知道原因? 定义了如下的state const state ...
- 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI
一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...
- vuex状态管理demo
vuex状态管理主要包含四个概念 mapState,mapMutations,mapGetters,mapActions. 编写vuex文件夹下面的store.js import Vue from ...
- 前端Vue框架-vuex状态管理详解
新人报道!多多关照-多提宝贵意见 谢谢- vuex理解 采用集中式存储管理模式.用来管理组件的状态,并以自定义规则去观测实时监听值得变化. 状态模式管理理解 属性 理解 state 驱动应用的数据源 ...
- 前端技术之:如何在vuex状态管理action异步调用结束后执行UI中的方法
一.问题的起源 最近在做vue.js项目时,遇到了vuex状态管理action与vue.js方法互相通信.互操作的问题.场景如下图所示: 二.第一种解决方法 例如,我们在页面初始化的时候,需要从服务端 ...
- VueX状态管理器 的应用
VueX状态管理器 cnpm i vuex axios -S 1 创建Vuex 仓库 import Vue from 'vue' import Vuex from 'vuex' vue.use(Vue ...
- vue第十八单元(单向数据流 vuex状态管理)
第十八单元(单向数据流 vuex状态管理) #课程目标 1.理解什么是数据管理模式 2.什么是vuex 3.什么时候使用vuex 4.vuex安装及工作原理 5.vuex语法 #知识点 1.首先来看下 ...
- Vuex 状态管理的工作原理
Vuex 状态管理的工作原理 为什么要使用 Vuex 当我们使用 Vue.js 来开发一个单页应用时,经常会遇到一些组件间共享的数据或状态,或是需要通过 props 深层传递的一些数据.在应用规模较小 ...
- vue 通信:父子通信、兄弟通信、跨多层通信、vuex状态管理
之前简单做了一次vue通信方法的培训,在此记录一下培训的内容. 关于vue通信,大家最先想到的方法应该是props.ref.$emit.$parent,还有vuex,因为这也是我在项目中最常用到的方法 ...
随机推荐
- 「2.0」一个人开发一个App,小程序从0到1,文件剖析
不知你是不是见到“文件剖析”这4个大字,才点进来看一看的?如果真是的话,那我可以坦诚.真心.负责任地告诉你:你上当了,你上了贼船啦,如果你现在想跳的话,还来得及,反正茫茫大海中,鲨鱼正缺搞程序的人.说 ...
- 9.Break和Continue
Break直接跳出循环和Continue略过本次循环,循环继续执行: Break在任何循坏语句的主体部分,均可用break控制循环的流程.break用于强制退出循环,不执行循环体中的语句,后边语句继续 ...
- 头条一面竟然问我Maven?
maven package和maven install 有什么区别? 你常用的maven命令有哪些? <dependencyManagement> 是干什么的? 还有用过其它构建工具吗? ...
- equals()和hashCode()必须同时覆盖的原因
我们在用JAVA创建自己的类的时候,一种比较常见的覆盖就是覆盖Object中的equals()方法和hashCode()方法.如果不这样做的话,就很可能违反Object.hashCode()的通用约定 ...
- 【STACK】Several待填的坑
待学的习: https://www.cnblogs.com/xiao-ju-ruo-xjr/p/9149792.html 待写的题: loj#3184:「CEOI2018」斐波那契表示法 luoguP ...
- 【Oracle】复制表结构和表数据
1.既复制表结构也复制表数据:CREATE TABLE tab_new AS SELECT * FROM tab_old; 2.只复制表结构:CREATE TABLE tab_new AS SELEC ...
- 用tensorflow的Eager执行模式
一.即时执行模式 import tensorflow as tfimport tensorflow.contrib.eager as tfetfe.enable_eager_execution() a ...
- 我的C++开发工具链
工欲善其事,必先利其器.想要干好活,顺手的工具是必不可少的.来分享下我的C++开发工具链. 平台:Windows 编译器:MSVC IDE:Visual Studio 版本控制:TortoiseGit ...
- 百度API之路线规划
近期参加一个课题,聊到路线规划问题,需要搜索两地点的最短线路距离以及最短用时等情况,然后就想着用借用百度API,做个参考 环境: python 3.6 主要问题: 1. 分析百度官方路线规划API了解 ...
- 爬虫之 cookie , 验证码,模拟登陆,线程
需求文档的定制 糗事百科的段子内容和作者(xpath的管道符)名称进行爬取,然后存储到mysql中or文本 http://sc.chinaz.com/jianli/free.html爬取简历模板 HT ...