状态管理

  • 在开发中,我们会用应用程序处理很多的数据,这些数据需要保存在我们应用程序徐的某一个位置,对于这些数据的管理我们就称之为状态管理

使用方法

  • 下载vuex最新版 npm install vuex@next
  • 新建文件夹及文件

* index.js导入createStore ,并创建state共享数据
import { createStore } from 'vuex'
const store = createStore({state() {return {counter: 100}}
})
export default store;
  • 在main.js文件中添加依赖并使用
    import store from './store'
    createApp(App).use(store).mount('#app')
  • 在组件中使用
    <h2>{{$store.state.counter}}</h2>
  • 组件方法中获取数据(不建议修改)
    this.$store.state.counter
  • 组件方法通过commit修改数据(建议)

单一状态树

  • 定义:用一个对象就包含全部的应用层级的状态
  • 单一状态树的优势:能够使用最直接的方式找到每个状态片段,方便维护、调试和管理

mapState方法

  • 导入

  • option api

  •  setup()做法

    封装成一个函数

    es6之扩展运算符 三个点(…)

  • 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中
let bar = { a: 1, b: 2 };
let baz = { ...bar }; // { a: 1, b: 2 }

相当于

let bar = { a: 1, b: 2 };
let baz = Object.assign({}, bar); // { a: 1, b: 2 }

getter的基本使用

  • 类似于computed

option api

当多个计算属性时,我们可以使用mapGetters (需要要导入)image.png  

mutations

  • 提交数据

  • mapMutations

提交到根里面

actions的基本使用(派发)

  • 可以进行异步操作

  • 派发到根actions里面  
  • 派发风格------对象类型

  • 辅助函数 mapActions 
  • setup函数中使用

  • 结合axios和promise做异步请求

modules(模块)

  • 使每个模块都拥有自己的state、mutation、action、getter,甚至嵌套子模块
  • 基本使用
    导出

  • 导入

  • 拿一个模块里面的getters里面的数据
  • 其他模块的getters里面的数据在根getters会做一个合并,
  • actions和mutations里面的数据同样会做合并

  • 但是这种方法很难让人知道数据到低是从那个文件传过来的
  • so:我们在定义模块的时候,在其对象里面设置属性

  • 使用

  • 在组件里使用模块辅助函数

1.写法一

2.写法二:
import { createNamespacedHelpers, mapState, mapGetters, mapMutations, mapActions } from "vuex"; const { mapState, mapGetters, mapMutations, mapActions } = createNamespacedHelpers("home")

computed(){...mapState(["homeCounter"]),...mapGetters(["doubleHomeCounter"])
}
  • 关于映射返回函数的处理方式(就算有子模块也适用)

  • 使用方法("模块名字",["方法名"])
    const getters = useGetters("home", ["doubleHomeCounter"])
  • 出口函数index.js
import { useGetters } from './useGetters';
import { useState } from './useState';export {useGetters,useState
}
  • useState.js
import { mapState, createNamespacedHelpers } from 'vuex'
import { useMapper } from './useMapper'export function useState(moduleName, mapper) {let mapperFn = mapStateif (typeof moduleName === 'string' && moduleName.length > 0) {mapperFn = createNamespacedHelpers(moduleName).mapState} else {mapper = moduleName}return useMapper(mapper, mapperFn)
}
  • useGetters.js
import { mapGetters, createNamespacedHelpers } from 'vuex'
import { useMapper } from './useMapper'export function useGetters(moduleName, mapper) {let mapperFn = mapGettersif (typeof moduleName === 'string' && moduleName.length > 0) {mapperFn = createNamespacedHelpers(moduleName).mapGetters} else {mapper = moduleName}return useMapper(mapper, mapperFn)
}
  • useMapper.js
import { computed } from 'vue'
import { useStore } from 'vuex'export function useMapper(mapper, mapFn) {// 拿到store独享const store = useStore()// 获取到对应的对象的functions: {name: function, age: function}const storeStateFns = mapFn(mapper)// 对数据进行转换const storeState = {}Object.keys(storeStateFns).forEach(fnKey => {const fn = storeStateFns[fnKey].bind({$store: store})storeState[fnKey] = computed(fn)})return storeState
}

Vuex的响应式原理相关推荐

  1. 深入浅出Vue响应式原理

    前言 Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是普通的 JavaScript 对象.而当你修改它们时,视图会进行更新.这使得状态管理非常简单直接,不过理解其工作原理同样重要,这 ...

  2. 你不知道的Vue响应式原理

    文章首发于github Blog. 本文根据Vue源码v2.x进行分析.这里只梳理最源码中最主要的部分,略过非核心的一些部分.响应式更新主要涉及到Watcher,Dep,Observer这几个主要类. ...

  3. vue 数组删除 dome没更新_详解Vue响应式原理

    摘要: 搞懂Vue响应式原理! 作者:浪里行舟 原文:深入浅出Vue响应式原理 Fundebug经授权转载,版权归原作者所有. 前言 Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是 ...

  4. Vue.js 深入响应式原理

    深入响应式原理 现在是时候深入一下了!Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是普通的 JavaScript 对象.而当你修改它们时,视图会进行更新.这使得状态管理非常简单直接 ...

  5. vue - 响应式原理梳理(一)

    描述  我们通过一个简单的 Vue应用 来演示 Vue的响应式属性: html:<div id="app">{{message}}</div>js:let ...

  6. Vue 响应式原理(双向数据绑定) 怎样实现 响应式原理?

    Vue 响应式原理(双向数据绑定) 怎样实现 响应式原理? 我们在Vue里面,定义在Data里的属性,叫做响应式属性. 每一个vue组件被创建的时候,同时还有一个对象被创建出来了,这个对象我们是看不到 ...

  7. Vue.js响应式原理

    Vue.js响应式原理 框架 浏览数:659 2017-9-20 关于Vue.js Vue.js是一款MVVM框架,上手快速简单易用,通过响应式在修改数据的时候更新视图.Vue.js的响应式原理依赖于 ...

  8. Vue3的响应式原理解析

    Vue3的响应式原理解析 Vue2响应式原理回顾 // 1.对象响应化:遍历每个key,定义getter.setter // 2.数组响应化:覆盖数组原型方法,额外增加通知逻辑 const origi ...

  9. vue2的响应式原理学“废”了吗?继续观摩vue3响应式原理Proxy

    一文了解Vue3的响应式原理 一.

最新文章

  1. 关于DSP的GPIO的输入输出设置
  2. NXT节点搭建(三)安装Nxt客户端
  3. 不懂编程的产品经理如何不被程序员吊打?
  4. php sql 二次注入,espcms 二次注入一枚
  5. python的pygame游戏开始结束信息_从0开始学python第14.8节-pygame射击游戏(一)
  6. C语言程序练习-L1-032 Left-pad (20分)
  7. javap的用途不断发展:您的Java类文件中隐藏了什么?
  8. 阿里动物园新成员来了,10本书带你读懂这个新物种
  9. JavaJDBC【三、增删改查】
  10. P1144 最短路计数
  11. 【Linux开发】linux设备驱动归纳总结(八):4.总线热插拔
  12. Shell脚本-tr 将大写字母变为小写
  13. spring学习笔记 (6)使用mybatis操作数据库增删改查
  14. 实例7:七段数码管绘制
  15. libmodbus协议栈4—— 总结
  16. 程序界的高手传奇(转)
  17. Charles华为手机保姆级安装过程
  18. 李宏毅机器学习特训营——regression课程笔记
  19. java中PreparedStatement和Statement详细讲解
  20. OAuth2:单点登陆客户端

热门文章

  1. 卡特兰数Catalan
  2. 【数据分析】—— 指标与指标体系
  3. PHP内核-Apache2的SAPI
  4. js 格式化当前时间 日期推算
  5. 智慧渣土运输管控系统
  6. SAP 基于收货的发票校验 GR-Based IV
  7. python正则表达式介绍
  8. 对SG函数(Sprague-Garundy函数)及其应用的简单解释与证明
  9. linux安装sqlserver
  10. 强基计划生命科学和计算机,问计问策 促“强基计划”落细落小落实