vuex

作者: 恒星的背影 | 来源:发表于2018-11-08 21:20 被阅读0次
  • 如何使用:
    一般是将 store 在根组件中注册一下即可,否则需要每个组件都引入,比较繁琐
  • 状态管理遇到的问题:
    多个视图依赖于同一状态
    来自不同视图的行为需要变更同一状态
  • 作用:
    状态管理---就是管理数据,这些数据表示 App 的状态
  • 特点:
    集中式的存储、管理
    保证状态变化是可预测和追踪的
    状态是响应式的
  • 如果有些状态严格属于单个组件,最好还是作为组件的局部状态

State

mapState 辅助函数:

import { mapState } from 'vuex'

computed: mapState({
  count(state, getters) {
    return getters['selectCount']
  }
})

Getter

类似于计算属性:

selectCount(state, getters) {
  return state.count + 1;
}

mapGetters 辅助函数:

mapGetters({
  // 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount`
  doneCount: 'doneTodosCount'
})

Mutation

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

多个参数时必须使用对象的形式传入,因为 commit 不接受多个参数:

store.commit('increment', {
  amount: 10
})

为了 devtools 的调试,约定 mutation 必须是同步函数

Action

可以包含异步操作,约定通过提交 mutation 变更状态

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

context 与 store 具有相同的属性和方法
更方便的写法:

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

使用时可以传参:

store.dispatch('incrementAsync', {
  amount: 10
})

Module

可以把 store 分割成模块,每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块

const store = new Vuex.Store({
  modules: {
    a: moduleA,
    b: moduleB
  }
})

对于模块内部的 action,根节点状态则为 context.rootState:

actions: {
  increment ({ state, commit, rootState }) {

  }
}

对于模块内部的 getter,根节点状态会作为第三个参数暴露出来:

getters: {
  sumWithRootCount (state, getters, rootState) {
    return state.count + rootState.count
  }
}

可以通过添加 namespaced: true 的方式使其成为带命名空间的模块:

模块内的 state 已经是嵌套的了,使用 `namespaced` 属性不会对其产生影响
getters['account/isAdmin']
dispatch('account/login')
commit('account/login')

使用 namespaced 不会影响模块内部的代码
若需要在全局命名空间内分发 action 或提交 mutation,将 { root: true } 作为第三参数传给 dispatch 或 commit 即可

dispatch('someAction')   // -> 'foo/someOtherAction'
dispatch('someAction', null, { root: true })   // -> 'someOtherAction'

项目结构

一些约定:
提交 mutation 是更改状态的唯一方法,并且这个过程是同步的

相关文章

  • VUEX基本介绍,包含实战示例及代码(基于Vue2.X)

    VUEX 1 VUEX基本介绍 1.1 官方API 1.2 什么是vuex 1.3 Vuex使用场景 1、Vuex...

  • 【文档笔记】-Vuex

    什么是vuex? vuex文档: https://vuex.vuejs.org/zh/[https://vuex....

  • vuex配置

    vuex配置 目录 vuex的五个核心 配置vuex vuex持久化 一、vuex五个核心概念 State 定义状...

  • Vuex

    安装Vuex cnpm install vuex --save-dev Vuex是什么? 这是[Vuex的官网](...

  • Vuex

    1.Vuex概述 2.Vuex基本使用 3.使用Vuex完成todo案例 1.Vuex概述 Vuex是实现组件全局...

  • vuex

    Vuex介绍: Vuex官网:http://vuex.vuejs.org/ Vuex是实现数据状态管理的技...

  • vuex+axios 的开发流程记录

    相关文档 vuex: https://vuex.vuejs.org/zh/ 是否有必要使用vuex vuex是vu...

  • 2019-06-07

    import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)...

  • 配置 vuex 和 vuex 本地持久化

    配置 vuex 和 vuex 本地持久化 目录 vuex是什么 vuex 的五个核心概念State 定义状态(变量...

  • vuex

    配置 vuex 和 vuex 本地持久化 目录 vuex是什么 vuex 的五个核心概念State 定义状态(变量...

网友评论

      本文标题:vuex

      本文链接:https://www.haomeiwen.com/subject/tkdpxqtx.html