zoukankan      html  css  js  c++  java
  • vuex自己的理解

    先上一张流程图

    我的理解:

    首先components(组件)通过dispatch方法触发actions(这里可以进行异步的操作比如后台取数据)

    然后actions通过commit()方法触发mutations(这里更改state中的数据但只能进行同步操作)

    最后state中的数据更新后展示在components(组件)

    官网说vuex有5个核心概念:

    state getter mutation action module

    一.state

    用于存放需要管理的数据,数据的结构根据项目自己设计,大概长这个样:

    const store = new Vuex.Store({
      state: {
        todos: [
          { id: 1, text: '...', done: true },
          { id: 2, text: '...', done: false }
        ],
        isShow: true,
        num: 0
      }
    })

    二.getter

    用于获取state里面的数据。
    getters是一个对象用于存放多个方法类似于计算属性需要放到计算属性里。
    方法接受state作为参数返回state中的数据,
    也可以接受其他getter作为第二个参数。

    const store = new Vuex.Store({
      state: {
        todos: [
          { id: 1, text: '...', done: true },
          { id: 2, text: '...', done: false }
        ]
      },
      getters: {
        doneTodos: state => {
          return state.todos.filter(todo => todo.done)
        }
      }
    })

    三.mutation

    用于更改state中的数据。mutations是一个对象用于存放多个方法类似于事件,
    方法接受state作为参数。方法不能直接调用,需要通过store.commit()的触发,方法名就是参数。
    store.commit('increment')
    可以在组件中使用 this.$store.commit('xxx') 提交 mutation

    也可以有额外的参数如下:

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

    可以用常量替代mutations事件类型

    // 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
        }
      }
    })

    四.action

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

    // 触发方式
    this.$store.dispatch('increment')

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

    上面代码中的increment就是mutation中的方法。

    Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象
    因此你可以调用 context.commit 提交一个 mutation,或者通过 context.state 和 context.getters 来获取 state 和 getters。

    五.module

    const moduleA = {
      state: { ... },
      mutations: { ... },
      actions: { ... },
      getters: { ... }
    }
    
    const moduleB = {
      state: { ... },
      mutations: { ... },
      actions: { ... }
    }
    
    const store = new Vuex.Store({
      modules: {
        a: moduleA,
        b: moduleB
      },
      state: {},
      mutations: {},
      actions: {}
    })
    
    store.state.a // -> moduleA 的状态
    store.state.b // -> moduleB 的状态

    目录结构:

    store:

    单个module:

    main.js:

  • 相关阅读:
    Dynamics AX 2012 R2 配置E-Mail模板
    Dynamics AX 2012 R2 设置E-Mail
    Dynamics AX 2012 R2 为运行失败的批处理任务设置预警
    Dynamics AX 2012 R2 耗尽用户
    Dynamics AX 2012 R2 创建一个专用的批处理服务器
    Dynamics AX 2012 R2 创建一个带有负载均衡的服务器集群
    Dynamics AX 2012 R2 安装额外的AOS
    Dynamics AX 2012 R2 将系统用户账号连接到工作人员记录
    Dynamics AX 2012 R2 从代码中调用SSRS Report
    Dynamics AX 2012 R2 IIS WebSite Unauthorized 401
  • 原文地址:https://www.cnblogs.com/gr07/p/8669463.html
Copyright © 2011-2022 走看看