5.手把手教你使用Vuex - 按属性进行拆分

😋 OK,看完以上的几篇文章,你应该明白了vuex是啥了,在项目中何时去使用了,并且怎么用心里大概也有个度啦,如果能达到这个效果,我觉得前几篇文章没有白写;如果你基于我的介绍有了自己的一些想法,欢迎评论到下方,我们一起讨论一下~ 🤗

🤯 接下来我们想象一下,目前我们介绍的store/index.js里面的内容是非常少的,如果你是一个稍微有些规格的项目,那么你将会得到一个成百上千行的index.js,然后查找一些东西就会非常费劲,我们建议你的一个文件内的行数尽量不要超过500行,不然对于调试来说没有好处。既然问题出来了,我们看一下怎么拆分一下。

  • 🤒 我们看到,一个store/index.js里面大致包含state/getters/mutations/actions这四个属性,我们可以彻底点,index.js里面就保持这个架子,把里面的内容四散到其他文件中。


    image.png
  • 🤖 最终的文件结构
    store
     |___index.js
     |___state.js
     |___mutations.js
     |___getters.js
     |___actions.js
    
    1. 拆出来state到state.js中
    const state = {
      loading: false,
      todoList : [
        {id:1,name:'11'},
        {id:2,name:'22'},
        {id:3,name:'33'},
      ],
      num: 0,
    }
    export default state
    
  • 2.拆出来mutations到mutations.js中
    const getters = {
      getListLength(state) {
        return state.todoList.length + ''
      },
    }
    export default getters
    
  • 3.拆出来mutations到mutations.js中
    const mutations = {
      setNumIs5(state){
        state.num = 5
      },
      setNumIsWhat(state,payload){
        state.num = payload.num
      }
    }
    export default mutations
    
  • 4.拆出来actions到actions.js中
    const actions = {
      setNum({commit},payload){
        return new Promise((resolve)=>{
          setTimeout(()=>{
            console.log('测试载荷---'+payload.id);
            commit('setNumIs5')
            resolve()
          },1000)
        })
      }
    }
    export default actions
    
  • 5.组装到index.js里面
    import Vue from 'vue'
    import Vuex from 'vuex'
    import state from './state'
    import getters from './getters'
    import mutations from './mutations'
    import actions from './actions'
    
    Vue.use(Vuex)
    
    const store = new Vuex.Store({
      state,
      getters,
      mutations,
      actions,
    })
    export default store
    
    1. 测试一下
    console.log(this.$store.getters.getListLength)
    this.$store.commit('setNumIs5')
    console.log(this.$store.state.num);
    await this.setNumAlias({id:'111'})
    console.log(this.$store.state.num);
    
image.png

🤓 以上就是简单的进行了按属性进行拆分store里面的代码,这样就比较清晰了哈,你需要加什么就去哪里加,大家各干各的,互不影响;当然,你完全可以不这么做,引用官方文档中的一句话,“需要多人协作的大型项目中,这会很有帮助。但如果你不喜欢,你完全可以不这样做”。我觉得说的很有道理。OK,接下来一个文章是来介绍当拆分后,方法名字的复用问题,这是我的理解啊,当然官方点的话,就是:‘常量替代 XXX 事件类型’,这究竟是什么,我们来一探究竟。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 安装 npm npm install vuex --save 在一个模块化的打包系统中,您必须显式地通过Vue.u...
    萧玄辞阅读 2,972评论 0 7
  • 1、模拟购物车功能 创建store/cart.js export default { state:{ cartl...
    千锋H5阅读 3,192评论 0 1
  • 配置 vuex 和 vuex 本地持久化 目录 vuex是什么 vuex 的五个核心概念State 定义状态(变量...
    稻草人_9ac7阅读 914评论 0 5
  • ### store 1. Vue 组件中获得 Vuex 状态 ```js //方式一 全局引入单例类 // 创建一...
    芸豆_6a86阅读 744评论 0 3
  • 配置 vuex 和 vuex 本地持久化 目录 vuex是什么 vuex 的五个核心概念State 定义状态(变量...
    sunny688阅读 2,356评论 0 23