zoukankan      html  css  js  c++  java
  • VueX源码分析(3)

    VueX源码分析(3)

    还剩余

    • /module
    • /plugins
    • store.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都会执行一次检测
  • 相关阅读:
    图文详解k8s自动化持续集成之GitLab CI/CD
    GitLab CI/CD 进行持续集成
    高性能伪事务之Lua in Redis
    面向对象之组合VS继承:继承过时了?
    Go依赖模块版本之Module避坑使用详解
    Maven3路程(三)用Maven创建第一个web项目(1)
    C#通过WIN32 API实现嵌入程序窗体
    Selenium自動化測試(Python+VS2013)-基礎篇-環境安裝
    VS2013中Python学习笔记[环境搭建]
    win7 windows server 2008R2下 https SSL证书安装的搭配(搭配https ssl本地测试环境)
  • 原文地址:https://www.cnblogs.com/lantuoxie/p/9353777.html
Copyright © 2011-2022 走看看