vuex的学习

2022-08-11 18:51:32 浏览数 (1)

一、接收state的方式有三种

1.引入store直接 使用插值的方式 {{$store.state.count}}

代码语言:javascript复制
{{$store.state.count}}

2.在computed中 声明一个方法 把$store.state.count return出来

代码语言:javascript复制
countTwo(){
return this.$store.state.count;
},

3.通过mapState 在computed中进行引入 ...mapstate(["stateValue"])

代码语言:javascript复制
...mapState(["count"]),

二、引入getters

1.引入store直接 直接在dom上绑定事件 @click="$store.commit('事件名称','参数')"

代码语言:javascript复制
<button @click="addAction(10)">增加</button>

2.引入mapMutations 在methods中进行注册:...mapMutations(["add"]),如果有参数..只能在dom绑定方法时进行传递..

代码语言:javascript复制
//eg: <input @click="add(10)"/>
...mapMutations(["add","reduce"]),

三、引入getters

使用mapGetters的方法类似于state的引入 两种引入方法

1.在computed中 声明方法 把this.$store.getters.count return出来

代码语言:javascript复制
count(){
return this.$store.getters.count;
}

2.通过mapGetters 在computed中进行引入 ...mapGetters(["gettersValue"])

代码语言:javascript复制
...mapGetters(["count"])

四、调用仓库中action的方法跟mutations的方法相同 也是两种

代码语言:javascript复制
完整vue
<template>
<div>
<h1>
vueX的实践
</h1>
<input :type="change">
<hr>
<!-- state第一种 -->
{{$store.state.count}}
<!-- state第二种 -->
{{countTwo}}
<!-- state第三种 -->
{{count}}
<div>
<!-- mutation第一种 -->
<button @click="$store.commit('add',10)">增加</button>
<!-- mutation第二种 -->
<button @click="addAction(10)">增加</button>
<button @click="reduceAction">减少</button>
<!-- {{change}} -->
</div>
<button @click="toChange">改变type</button>
</div>
</template>
<script>
import store from '@/vuex/vuex'
import {mapState,mapMutations,mapGetters,mapActions} from 'vuex'
export default {
data() {
return {
msg: 'vueX的实践',
change:'date'
}
},
// 必须要写
store,
// 接收state的方式有三种
// 1.引入store直接 使用插值的方式 {{$store.state.count}}
// 2.在computed中 声明一个方法 把$store.state.count return出来
// 3.通过mapState 在computed中进行引入 ...mapstate(["stateValue"])
computed:{
// state第二种
countTwo(){
return this.$store.state.count;
},
// state第三种
...mapState(["count"]),

//引入getters
// 使用mapGetters的方法类似于state的引入 两种引入方法
// 1.在computed中 声明方法 把this.$store.getters.count return出来
// 2.通过mapGetters 在computed中进行引入 ...mapGetters(["gettersValue"])

// getters第一种获取方法
// count(){
// return this.$store.getters.count;
// }
// getters第二种获取方法
...mapGetters(["count"])
},
// 调用仓库中mutations的方法的两种
//1.引入store直接 直接在dom上绑定事件 @click="$store.commit('事件名称','参数')"
//2.引入mapMutations 在methods中进行注册:...mapMutations(["add"]),如果有参数..只能在dom绑定方法时进行传递..
//eg: <input @click="add(10)"/>

//调用仓库中action的方法跟mutations的方法相同 也是两种
methods:{
...mapMutations(["add","reduce"]),
...mapActions(['addAction',"reduceAction"]),
toChange(){
this.change = 'text'
}
},
created(){
console.log([...mapMutations])
},
}
</script>

<style scoped>
</style>
代码语言:javascript复制
完整vuex.js:
import vue from "vue";
import vuex from 'vuex'
vue.use(vuex)

// state 是状态 或是变量 字面量形式
const state= {
count:10
}
//mutation 修改状态 也可以理解为同步方法 跟下面的action异步 执行顺序相反
const mutations = {
// 传参
add(state,n){
console.log(n)
state.count  
},
reduce(state){
state.count--
}
}
//getters 状态过滤 类似于computed 每改变一个state就进行一次过滤
const getters = {
// const:function(){} ==== var const =function(){return value}
//state参数是状态那个对象
count:function(state){
return state.count =100
}
}

// action 处理异步方法 可以调用mutations里面的方法
const actions = {
// 先执行
addAction(context){
context.commit('add',10)
},
// 后执行 因为是异步
reduceAction(context){
context.commit('reduce')
}
}

// 暴露出去
export default new vuex.Store({
state,
mutations,
getters,
actions
})

vuex存值:
state:{
value:''
}

mutations:{
changeValue(state,newVal){
state.value=newVal
}
}

//存

代码语言:javascript复制
this.$store.commit('changeValue',1)

//取

代码语言:javascript复制
console.log(this.$store.state.value)//1

0 人点赞