zoukankan      html  css  js  c++  java
  • vuex的阶段汇总

    store的架构关系

     
     
    new Vuex.store({
      state,
      mutations,
      actions,
      getters
    })

    main.js

    import store from './store/store'
    
    new Vue({
        store, //注入进来
        router,
        render: h => h(App),
    }).$mount('#app')

    state

    定义

    new Vuex.store({
      state:{
        count:0
      }
    })

    使用

    const Counter = {
      template: `<div>{{ count }}</div>`,
      computed: {
        count () {
          return this.$store.state.count
        }
      }
    }

    放在计算属性中

    getters

    理解为store中的计算属性

    一、state做为第一参数

    getters:{
      f:(state)=>{...}

    二、getter做为第二参数

    getters:{
      f:(state,getter)=>{...}

    三、将getter返回成函数,方便传参

    getters:{
      f:(state)=>(fm)=>{
        return ....}

    使用方法:

    this.$store.getters.f(xx)

    mutations

    每个mutation可以抽象为一个事件类型(type)+回调函数(handler)

    const store = new Vuex.Store({
      state: {
        count: 1
      },
      mutations: {
        // 事件类型 type 为 increment
        increment (state) {
          // 变更状态
          state.count++
        }
      }
    })

    使用 commit触发

    store.commit('increment')

    一、state做为第一参数

    mutations: {
      increment (state, n) {
        state.count += n
      }
    }
    
    // 调用
    store.commit('increment', 10)

    二、载荷做为第二参数

    这个额外的参数称为 '载荷',一般为对象

    mutations: {
      increment (state, payload) {
        state.count += payload.amount
      }
    }

    提交的两种方式

    // 1、把载荷和type分开提交
    store.commit('increment', {
      amount: 10
    })
    
    // 2、整个对象都作为载荷传给 mutation 函数
    store.commit({
      type: 'increment',
      amount: 10
    })

    事件名使用常量

    // mutation-types.js
    export const SOME_MUTATION = 'SOME_MUTATION'
    // store.js
    import Vuex from 'vuex'
    import { SOME_MUTATION } from './mutation-types'
    
    const store = new Vuex.Store({
      state: { ... },
      mutations: {
        // 使用 ES2015 风格的计算属性命名功能来使用一个常量作为函数名
        [SOME_MUTATION] (state) {
          // mutate state
        }
      }
    })

    actions

    Action 类似于 mutation,不同在于:

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

    const store = new Vuex.Store({
      state: {
        count: 0
      },
      mutations: {
        increment (state) {
          state.count++
        }
      },
      actions: {
        increment (context) {
          context.commit('increment')
        }
      }
    })

    可以看到,Action 函数接受一个 context 参数,注意,这个参数可不一般,它与 store 实例有着相同的方法和属性,但是他们并不是同一个实例,后面学习 Modules 的时候会介绍它们为什么不一样。

     

    所以在这里可以使用 context.commit 来提交一个 mutation,或者通过 context.statecontext.getters 来获取 state 和 getters。

    当然,为了代码简化,我们可以使用 ES2015 的 参数解构 来直接展开,便于 commit、state 等多次调用。如下:

    actions: {
      increment ({ commit }) {
        commit('increment')
      }
    }

    context(也即store)的属性

    context.commit(ADD_COUNT)
    context.dispatch(ADD_COUNT)
    context.getters
    context.rootGetters
    context.rootState
    context.state

    分发action

    store.dispatch('increment')

    modules

    模块示意图

    模块里面定义的mutation和action都是注册到全局中去的。

  • 相关阅读:
    大数据技术(1-5题)
    如何使用不同的编程语言来造一匹马
    Redis 数据类型及应用场景
    Swoole中内置Http服务器
    redis 数据库主从不一致问题解决方案
    easyswoole对接支付宝,微信支付
    PHP+Swoole 作为网络通信框架
    基于swoole实现多人聊天室
    swoole与php协程实现异步非阻塞IO开发
    swoole中使用task进程异步的处理耗时任务
  • 原文地址:https://www.cnblogs.com/tinaluo/p/15774803.html
Copyright © 2011-2022 走看看