zoukankan      html  css  js  c++  java
  • vuex使用总结

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。

    Vuex 并不限制你的代码结构。但是,它规定了一些需要遵守的规则:

    应用层级的状态应该集中到单个 store 对象中。

    提交 mutation 是更改状态的唯一方法,并且这个过程是同步的。

    异步逻辑都应该封装到 action 里面。

    只要你遵守以上规则,如何组织代码随你便。如果你的 store 文件太大,只需将 action、mutation 和 getter 分割到单独的文件。

    对于大型应用,我们会希望把 Vuex 相关代码分割到模块中。下面是项目结构示例:

    ├── index.html
    ├── main.js
    ├── api
    │   └── ... # 抽取出API请求
    ├── components
    │   ├── App.vue
    │   └── ...
    └── store
        ├── index.js          # 组装模块并导出 store 的地方
        ├── getters.js        # getters
        └── modules
            ├── cart.js       # 购物车模块
            └── products.js   # 产品模块
    

    vuex 项目使用总结

    index.js

    import Vue from 'vue'
    import Vuex from 'vuex'
    import getters from './getters'
    
    Vue.use(Vuex)
    
    // https://webpack.js.org/guides/dependency-management/#requirecontext
    const modulesFiles = require.context('./modules', true, /.js$/)
    
    // you do not need `import app from './modules/app'`
    // it will auto require all vuex module from modules file
    const modules = modulesFiles.keys().reduce((modules, modulePath) => {
      // set './app.js' => 'app'
      const moduleName = modulePath.replace(/^./(.*).w+$/, '$1')
      const value = modulesFiles(modulePath)
      modules[moduleName] = value.default
      return modules
    }, {})
    
    const store = new Vuex.Store({
      modules,
      getters
    })
    
    export default store
    

    getters.js

    const getters = {
        accessToken: all=> state.products.all,
    }
    
    export default getters
    

    modules

    products.js

    import shop from '../../api/shop'
    
    // initial state
    const state = {
      all: []
    }
    
    // getters
    const getters = {}
    
    // actions
    const actions = {
      getAllProducts ({ commit }) {
        shop.getProducts(products => {
          commit('setProducts', products)
        })
      }
    }
    
    // mutations
    const mutations = {
      setProducts (state, products) {
        state.all = products
      },
    
      decrementProductInventory (state, { id }) {
        const product = state.all.find(product => product.id === id)
        product.inventory--
      }
    }
    
    export default {
      namespaced: true,
      state,
      getters,
      actions,
      mutations
    }
    
  • 相关阅读:
    一台电脑上的git同时使用两个github账户
    git自己操作命令组集合
    git基本原理
    js如何遍历表单所有控件
    js如何访问表单(四种方法)(博客园+li的方式去掉p标签)
    js如何操作表格(常用属性方法汇总)
    php数学和时间常用函数有哪些(总结表)(看学习视频效率挺高的)(复习)
    swift 笔记 (十九) —— 协议
    ecshop广告调用方法
    K60 启动过程分析
  • 原文地址:https://www.cnblogs.com/WNpursue/p/12422141.html
Copyright © 2011-2022 走看看