VueX源码分析(3)
VueX源码分析(3)
还剩余
/module/pluginsstore.js
/plugins/devtool.js
const devtoolHook =
  typeof window !== 'undefined' &&
  window.__VUE_DEVTOOLS_GLOBAL_HOOK__
export default function devtoolPlugin (store) {
  if (!devtoolHook) return
  store._devtoolHook = devtoolHook
  devtoolHook.emit('vuex:init', store)
  devtoolHook.on('vuex:travel-to-state', targetState => {
    store.replaceState(targetState)
  })
  store.subscribe((mutation, state) => {
    devtoolHook.emit('vuex:mutation', mutation, state)
  })
}
- 浏览器开发者工具支持监控VueX
 
/plugins/logger.js
repeat
function repeat (str, times) {
  return (new Array(times + 1)).join(str)
}
解析:
- 字符串重复几次repeat('0', 5)会返回'00000'
 
pad
function pad (num, maxLength) {
  return repeat('0', maxLength - num.toString().length) + num
}
解析:
- 给数字补零,如pad(5, 5) 会返回'000005'
 
createLogger
import { deepCopy } from '../util'
export default function createLogger ({
  collapsed = true,
  filter = (mutation, stateBefore, stateAfter) => true,
  transformer = state => state,
  mutationTransformer = mut => mut,
  logger = console
} = {}) {
  return store => {
    let prevState = deepCopy(store.state)
    store.subscribe((mutation, state) => {
      if (typeof logger === 'undefined') {
        return
      }
      const nextState = deepCopy(state)
      if (filter(mutation, prevState, nextState)) {
        const time = new Date()
        const formattedTime = ` @ ${pad(time.getHours(), 2)}:${pad(time.getMinutes(), 2)}:${pad(time.getSeconds(), 2)}.${pad(time.getMilliseconds(), 3)}`
        const formattedMutation = mutationTransformer(mutation)
        const message = `mutation ${mutation.type}${formattedTime}`
        const startMessage = collapsed
          ? logger.groupCollapsed
          : logger.group
        // render
        try {
          startMessage.call(logger, message)
        } catch (e) {
          console.log(message)
        }
        logger.log('%c prev state', 'color: #9E9E9E; font-weight: bold', transformer(prevState))
        logger.log('%c mutation', 'color: #03A9F4; font-weight: bold', formattedMutation)
        logger.log('%c next state', 'color: #4CAF50; font-weight: bold', transformer(nextState))
        try {
          logger.groupEnd()
        } catch (e) {
          logger.log('—— log end ——')
        }
      }
      prevState = nextState
    })
  }
}
console的一些报错处理模板store.subscribe监控的是commit,每次commit都会执行一次检测
VueX源码分析(3)的更多相关文章
- VueX源码分析(5)
		
VueX源码分析(5) 最终也是最重要的store.js,该文件主要涉及的内容如下: Store类 genericSubscribe函数 resetStore函数 resetStoreVM函数 ins ...
 - VueX源码分析(4)
		
VueX源码分析(4) /module store.js /module/module.js import { forEachValue } from '../util' // Base data s ...
 - VueX源码分析(2)
		
VueX源码分析(2) 剩余内容 /module /plugins helpers.js store.js helpers要从底部开始分析比较好.也即先从辅助函数开始再分析那4个map函数mapSta ...
 - VueX源码分析(1)
		
VueX源码分析(1) 文件架构如下 /module /plugins helpers.js index.esm.js index.js store.js util.js util.js 先从最简单的 ...
 - 逐行粒度的vuex源码分析
		
vuex源码分析 了解vuex 什么是vuex vuex是一个为vue进行统一状态管理的状态管理器,主要分为state, getters, mutations, actions几个部分,vue组件基于 ...
 - vuex源码分析3.0.1(原创)
		
前言 chapter1 store构造函数 1.constructor 2.get state和set state 3.commit 4.dispatch 5.subscribe和subscribeA ...
 - vuex 源码分析(七) module和namespaced 详解
		
当项目非常大时,如果所有的状态都集中放到一个对象中,store 对象就有可能变得相当臃肿. 为了解决这个问题,Vuex允许我们将 store 分割成模块(module).每个模块拥有自己的 state ...
 - vuex 源码分析(六) 辅助函数 详解
		
对于state.getter.mutation.action来说,如果每次使用的时候都用this.$store.state.this.$store.getter等引用,会比较麻烦,代码也重复和冗余,我 ...
 - vuex 源码分析(五) action 详解
		
action类似于mutation,不同的是Action提交的是mutation,而不是直接变更状态,而且action里可以包含任意异步操作,每个mutation的参数1是一个对象,可以包含如下六个属 ...
 
随机推荐
- 微信授权登录(OAuth2.0)--  随记
			
1.OAuth2.0简介 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户 ...
 - PHPExcel探索之旅---阶段一
			
类似于Java,php也有操作Excel的方法,其中需要下载PHPExcel插件,将其中的Classes文件夹改名为PHPExcel并提取到根文件夹外面,将两个文件夹一起放在所需项目中 使用PHPEx ...
 - SPGroup 和SPUser的常用操作
			
http://www.cnblogs.com/gzh4455/archive/2012/03/26/2417854.html private bool RemoveUserFromGroup(stri ...
 - Luogu P2973 [USACO10HOL]赶小猪Driving Out the Piggi 后效性DP
			
有后效性的DP:$f[u]$表示到$u$的期望次数,$f[u]=\Sigma_{(u,v)} (1-\frac{p}{q})*f[v]*deg[v]$,最后答案就是$f[u]*p/q$ 刚开始$f[1 ...
 - P2746 [USACO5.3]校园网Network of Schools
			
传送门 把所有学校的关系构成一个图,显然一个强联通分量的所有学校只要有一个有新软件,其他学校也都会有 考虑缩点,发现入度为 0 的块一定要给,因为没有其他人给它 入度不为 0 的块一定有其他人给,我们 ...
 - JD孔_20160920
			
1. 2. 3.
 - powerdesigner添加唯一约束
			
假设我们有一个user表,字段为ID和NAME,现在ID作为逻辑主键,自增,想将NAME添加唯一约束,话不多说直接上图: # 添加一个key, 名字随便取,我取为key_u # 双击添加的key的第一 ...
 - eslint规则 中文备注
			
{ "ecmaFeatures": {}, "rules": { "no-alert": 0,//禁止使用alert confirm pro ...
 - Storm概念学习系列之storm的功能和三大应用
			
不多说,直接上干货! storm的功能 Storm 有许多应用领域:实时分析.在线机器学习.持续计算.分布式 RPC(远过程调用协议,一种通过网络从远程计算机程序上请求服务). ETL(Extract ...
 - Storm概念学习系列之什么是实时流计算?
			
不多说,直接上干货! 什么是实时流计算? 1.实时流计算背景 2.实时计算应用场景 3.实时计算处理流程 4.实时计算框架 什么是实时流计算? 所谓实时流计算,就是近几年由于数据得到广泛应用之后 ...