action mutation 调用_mutation和action及mapMutations、mapActions

## mutation

拿到state,和传过来的数据,进行修改state里的数据

传参不能乱传,只有第二个参数,如果传多个数据,将这些数据包装成对象。

~~~

export default {

updateCount(state, num){

state.count = num;

}

}

~~~

~~~

组件中

this.$store.commit('updateCount',{num1: i++,num2:2});

mutation中

export default {

updateCount(state, {num1}){ //解构方法

state.count = num1;

}

}

~~~

commit只接收两个参数,第一个是mutation名称,第二个参数对象。

**mutation是用来专门修改state的数据的,vue官方推荐,所有state修改放在mutation的方法里**。但是外面是可以修改的,但是会报警告。

使用vuex目的:规范数据的修改。强制不能修改如下:

strict : true,

~~~

new Vuex.Store({

strict : true,

state: defaultState,

mutations,

getters

})

~~~

但是不要再正式环境中使用

~~~

const isDev = process.env.NODE_ENV === "development";

strict : isDev

~~~

此时才会warning,正式代码规范问题,如果随意修改,vuex的意义就没有了。

## actions

**store/getters/getters.js

store/mutations/mutations.js

store/state/state.js

store/actions/actions.js

store/store.js**

~~~

actions.js

export defalult {

//第一个参数是store,这个vux的store,第二个是触发action的对象,不会有第三个参数(封装成对象)

updateCountAsync(store, data ){

setTimeout(()=>{

store.commit('updateCount', {num1:data.num,num2:1})

},data.time)

}

}

~~~

**mutation必须同步操作数据,里面不能有异步代码,如果写异步代码,必须放入action中**

action:处理异步操作数据的方法

~~~

store.js

import defaultState from "./state/state.js"

import mutations from "./mutations.mutations.js"

import getters from "./getters/mutations"

import actions from "./actions/actions.js"

export default ()=>{

return new Vuex.Store({

state:defaultState ,

mutations,

getters,

actions

}

})

}

~~~

组件内部

dispatch:专门触发action

~~~

this.$store.dispatch("updateCountAsync",{num:5,time:2000})

~~~

**有异步代码,比如ajax请求,写入actions中,用同步代码,写在mutation中。**

## mapActions和mapMutationis

对应的 是操作,操作应写在methods中

~~~

组件中

import { mapState, mapGetters, mapActions, mapMutations} from "vuex";

methods:{

...mapActions:['updateCountAsync'],

...mapMutations:['updateCount'],

}

//使用方法

this.updateCountAsync({num:5,time:2000});

this.updateCount({num1:i, num2:1});

~~~

好处:调用方法的时候,不需要在传方法的名字,可以根据自己的需要建立方法的对应关系。

现在修改数据都是要刷新页面的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值