美文网首页
前端小白成长--vuex

前端小白成长--vuex

作者: Clover园 | 来源:发表于2020-08-14 15:37 被阅读0次

完整购物车demohttps://gitee.com/cloveryuan/cartdemo

image.png
  • 统一的导入modules
const modulesFiles = require.context('./modules', true, /\.js$/)
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')// $1是正则里的捕获,就是前面()里的东西
  const value = modulesFiles(modulePath)
  modules[moduleName] = value.default
  return modules
}, {})
  • 缓存写入自己的plugins
    Vuex的插件就是一个函数,这个函数接受一个store参数,这个参数可以订阅一个函数,让这个函数在所有的mutation结束之后执行。
const myPlugin = store => {
  // 当store初始化后调用
  store.subscribe((mutation, state) => {
    // 每次mutation之后调用
    // mutation的格式为{ type, payload }
  })
}

eg:购物车的car模块

// 自定义插件carPlugin,只有car模块里面调用motution,就保存购物车最新详情
const carPlugin = store => {
  store.subscribe((mutation, state) => {
    if (mutation.type.startsWith('cart/')) {
      window.localStorage.setItem('car-products', JSON.stringify(state.cart.cartProducts))
    }
  })
}

const store = new Vuex.Store({
  strict: process.env.NODE_ENV !== 'production',
  modules,
  plugins: [carPlugin]
})
export default store
  • 手写简单版vuex
    vuex由install,和Store组成
    Store是一个包含{state,getters,mutations,actions,还有commit,dispatch方法}
let _Vue = null // 存放vue构造函数
class Store {
  constructor (options) {
    const {
      state = {},
      getters = {},
      mutations = {},
      actions = {}
    } = options
    this.state = _Vue.observable(state)
    this.getters = Object.create(null)
    Object.keys(getters).forEach(key => {
      Object.defineProperty(this.getters, key, {
        get: () => getters[key](state)
      })
    })
    this._mutations = mutations
    this._actions = actions
  }

  commit (type, payload) {
    this._mutations[type](this.state, payload)
  }

  dispatch (type, payload) {
    this._actions[type](this, payload)
  }
}
function install (Vue) {
  _Vue = Vue
  _Vue.mixin({ // 只有实例中$options才有store,组件$options中没有,只需要实例化的时候调用install就好了
    beforeCreate () {
      if (this.$options.store) {
        _Vue.prototype.$store = this.$options.store // 实例上的store注入原型上去,这样可以直接this.$store获取到store
      }
    }
  })
}
export default { install, Store }

相关文章

  • 前端小白成长--vuex

    完整购物车demohttps://gitee.com/cloveryuan/cartdemo 统一的导入modul...

  • Awesome FED materials

    前端综合 http://johnhax.net/events vuex https://vuex.vuejs.or...

  • 2020-11-23 Vuex真香!

    用了Vuex 前端清晰多了,还快,喵喵喵~

  • 【前端】vuex

    一、vuex是什么? vuex是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有...

  • 前端笔记 — vuex

    一. 什么是Vuex Vuex是一个专为Vue.js应用程序开发的状态管理模式,以利用Vue.js的细粒度数据响应...

  • 【前端Vue】Vuex

    1. Vuex介绍和作用 1.1 Vuex 能做什么? 官方解释:Vuex 是一个专为 Vue.js应用程序开发的...

  • vuex小白入门

    首先:Vuex是什么? 有关于Vuex,官网是这样定义的:Vuex 是一个专为 Vue.js 应用程序开发的状态管...

  • vuex小白入门

    首先:Vuex是什么? 有关于Vuex,官网是这样定义的:Vuex 是一个专为 Vue.js 应用程序开发的状态管...

  • Tips on Vuex 1.0

    写了一个基于 Vue 1 和 iView 的前端项目,用 Vuex 做了状态管理,分享一下 Vuex 比较重要的知...

  • 前端废物的自救之路(3)使用Cookie完成Nuxt.js中Vu

    前端废物的自救之路(3)使用Cookie完成Nuxt.js中Vuex的持久化 为什么需要Vuex持久化 在开发的过...

网友评论

      本文标题:前端小白成长--vuex

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