zoukankan      html  css  js  c++  java
  • Vuex之第五弹终弹之模块化实践项目运用

    vuex模块化结构目录

    1>store>index.js

    import Vue from 'vue';
    import Vuex from 'vuex';
    import state from './state';
    import mutations from './mutation';
    import api from './api';
    import system from './system';
    Vue.use(Vuex);
    export default new Vuex.Store({
      state,
      mutations,
      modules: {
        api: api,
        system: system
      }
    });

    2>store>system>actions.js

    import * as types from './mutation-types';
    export const topUserListAction = ({ state, dispatch, commit, getters }, params) => {
      let payload = {
        val: 99
      };
      console.log('我进来了params', params.data);
      commit(types.SYSTEM_LOG_ID_QUERY, params.data);
      console.log('我进来了5state', state);
      console.log('我进来了5state', getters.perpage);
      dispatch('api/getTopUserList', payload, { root: true });
    };

    2>store>system>getters.js

    export const perpage = state => {
      return state.te2Sys + 'c4';
    };

    3>store>system>mutations.js

    import * as types from './mutation-types';
    export default {
      [types.SYSTEM_LOG_ID_QUERY](state, res) {
        state.te2Sys = state + res;
      }
    };

    4>store>system>mutation-types.js

    export const SYSTEM_LOG_ID_QUERY = 'SYSTEM_LOG_ID_QUERY';

    5>store>system>index.js

    import * as actions from './actions';
    import mutations from './mutations';
    import * as getters from './getters';
    const state = {
      te2Sys: 'c3'
    };
    export default {
      namespaced: true,
      state,
      getters,
      actions,
      mutations
    };

    6>store的api其他大致与system一样,主要是actions的

    store>api>actions.js

    export const getTopUserList = ({ state, dispatch }, payload, root) => {
      console.log('我进来了2', payload);
      dispatch('api/ajaxMethod', { param: ['get', state.server + '/dispatch/order/findTop10Users', payload.param, payload] }, { root: true });
    };
    export const ajaxMethod = ({ state, dispatch }, data) => {
      console.log('我进来了7', data);
    };

    7>vue页面开始调用,也就是所谓的执行入口

    <script>
    import { mapGetters, mapActions } from 'vuex';
    export default {
      components: {},
      props: {},
      data() {
        return {};
      },
      watch: {},
      computed: {},
      methods: {
        ...mapActions('system', ['topUserListAction'])
      },
      created() {},
      mounted() {
        console.log(this.$store);
        this.topUserListAction({ data: '我是人' });
      }
    };
    </script>

    解析:

    1>在vue中打印的

    console.log(this.$store); 中,vuex的actions的值目前为现在这样,因为是模块化所以带上了类似api/后面跟的其中action暴露的方法名字,
    而且调用的时候需要
    ...mapActions('system', ['topUserListAction'])
    前面那一个必须是模块名,后面为模块名对应的方法名,如果2个action模块不一样,那就再调一次,如
    ...mapActions('api', ['***'])

    2>第一步执行之后,就先走到了store>system>actions.js的topUserListAction里面

    可以看到第一组对象是vuex全家桶的内部调用形式,第二个是外部传来的参数

    在方法里面直接演示了

    state, dispatch, commit, getters这四种调用的形式,其中需要注意一点的是dispatch里面的{ root: true },不加就会报错
    错误原因是你可以理解为deep这种深度监听,它会寻找到这个模块下的根目录,然后就会调用
    api/getTopUserList也就是api模块下的getTopUserList的actions的方法
    想要具体了解,就看官网https://vuex.vuejs.org/zh/guide/modules.html
    3>从system模块下进入到了api模块下的actions的getTopUserList
    4>然后进入到了相同模块下的ajaxMethod
  • 相关阅读:
    tp6 控制器不存在:appindexcontrollerIndex
    thinkphp助手函数
    thinkphp5.1、thinkphp6
    lnmp安装
    关于像秒杀这种高并发场景的解决方案
    C# 基于hslcommunication的异步,同步,一对多,webapi等跨程序网络框架实现,适用程序-程序通信
    C# 调用Python脚本 python脚本反调用C#方法 python脚本调用另一个脚本
    C# webapi服务器,创建自定义的,简单的web服务器,供远程接口调用
    C# 创建mqtt服务器,mqtt发布数据,验证逻辑
    C# 实现 websocket 服务器 发送客户端网页前端数据,C#和网页前端通信
  • 原文地址:https://www.cnblogs.com/lsc-boke/p/11344962.html
Copyright © 2011-2022 走看看