Vuex(State、Getter、Mutation、Action)

State

1.创建state状态,状态就是那个存数据的对象

就类似于之前的Data,但是这个state全局都可以使用

添加:

  state: {

    msg: "我就是所有共享的数据"

  }

使用:

    <h1>页面上使用------{{$store.state.msg}}</h1>

组件中访问数据------this.$store.state.msg

 

 

 

Getter

getter就就像是store的计算属性,它会传入state对象供我们操作

 

定义:在mian.js/Vuex中定义 getters属性,传入state参数。定义函数计算state中的数据并返回

  getters:{

    age(state){

      return new Date().getFullYear()-new Date(state.birth).getFullYear()

    }

  }

使用:利用$store.getters.age语句访问getters中的返回值

   <h2>页面上使用语句------{{$store.getters.age}}</h2>

 

 

Mutation

组件中希望更改 Vuex store 中的状态(数据)的唯一方法是提交 mutation不要用赋值表达式直接在组件中给store设置新数据这样设计的原因是,只有通过mutation来更新数据,它才会去帮我们通知所有使用数据的组件更新数据 刷新UI

注意:一条重要的原则就是要记住 mutation 必须是同步处理(官方说是不要使用异步操作,因为不好看调试结果)

定义:在mian.js/Vuex中定义 mutations属性,并在属性中定义修改值的函数,后面使用时就可以将函数名直接当作变量来使用

 

const store = new Vuex.Store({

  state: {

    msg: "我就是所有共享的数据"

  },

  mutations:{

    changedata(state,obj){

      state.msg=obj.value

    }

  }

})

错误的定义案例:

  mutations: {

    increment (state,obj) {

    //如果fnAsync函数是一个异步业务函数,就会导致更新失败

    fnAsync(() => {

      state.count=obj.n

    })

    }

     },

 

使用:通过 this.$store.commit()调用 mutations中的函数来进行修改仓库中的值

 

    methods: {

        change() {

            this.$store.commit("changedata", { value: "box2修改的值" })//直接传入值

            this.$store.commit({type:"changedata"n: "box2修改的值" })//传入一个对象

        }

    }

Action

Action 提交的是 mutation,而不是直接变更状态。Action 可以包含任意异步操作。

 

定义:用commit调用的一定是mutations属性中的函数

  actions:{

    // 可以使用异步函数

    changedata2(ctx,obj){

      setTimeout(()=>{

        ctx.commit("changedata",obj)

      },100)

    }

  }

 

使用:利用this.$store.dispatch()指令来修改值

    methods: {

        change() {

            this.$store.dispatch("changedata2", { value: "box2修改的值" })

        }

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值