前端开发那些事儿

Vuex

2021-07-23  本文已影响0人  大佬教我写程序

状态管理

使用方法

* index.js导入createStore ,并创建state共享数据
import { createStore } from 'vuex'
const store = createStore({
  state() {
    return {
      counter: 100
    }
  }
})
export default store;

单一状态树

mapState方法

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的基本使用

option api

mutations

actions的基本使用(派发)

image.png

modules(模块)

computed(){
  ...mapState(["homeCounter"]),
  ...mapGetters(["doubleHomeCounter"])
}

关于映射返回函数的处理方式(就算有子模块也适用)

import { useGetters } from './useGetters';
import { useState } from './useState';

export {
  useGetters,
  useState
}
import { mapState, createNamespacedHelpers } from 'vuex'
import { useMapper } from './useMapper'

export function useState(moduleName, mapper) {
  let mapperFn = mapState
  if (typeof moduleName === 'string' && moduleName.length > 0) {
    mapperFn = createNamespacedHelpers(moduleName).mapState
  } else {
    mapper = moduleName
  }

  return useMapper(mapper, mapperFn)
}

import { mapGetters, createNamespacedHelpers } from 'vuex'
import { useMapper } from './useMapper'

export function useGetters(moduleName, mapper) {
  let mapperFn = mapGetters
  if (typeof moduleName === 'string' && moduleName.length > 0) {
    mapperFn = createNamespacedHelpers(moduleName).mapGetters
  } else {
    mapper = moduleName
  }

  return useMapper(mapper, mapperFn)
}

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
}
上一篇 下一篇

猜你喜欢

热点阅读