zoukankan      html  css  js  c++  java
  • [Vuex] Split Vuex Store into Modules using TypeScript

    When the Vuex store grows, it can have many mutations, actions and getters, belonging to different contexts.

    Vuex allows you to split your store into different contexts by using modules.

    In this lesson we’ll see how can we split the store in multiple Vuex modules using TypeScript

    From the code we have before:

    import Vue from 'vue';
    import Vuex from 'vuex';
    
    import todos, {getters, mutations, actions} from './todos';
    
    Vue.use(Vuex);
    
    export default new Vuex.Store({
      state: {
        ...todos,
      },
      getters,
      mutations,
      actions
    });

    To:

    import Vue from 'vue';
    import Vuex from 'vuex';
    
    import {todos} from './todos';
    
    Vue.use(Vuex);
    
    export default new Vuex.Store({
      modules: {
        todos,
      }
    });

    You can put 'getters, actions, mutations, state' into 'modules' which has many features as key 

    modules: {
      todos: {getters, actions, state, mutations},
      login  : {getters, actions, state, mutations},
    }

    Todo store:

    import {GetterTree, MutationTree} from 'vuex';
    import {State} from '../types';
    import {Todo} from '../types';
    
    const state: State = {
        todos: [
            {text: 'Buy milk', checked: false},
            {text: 'Learning', checked: true},
            {text: 'Algorithom', checked: false},
        ],
    };
    
    const getters: GetterTree<State, any> = {
        todos: state => state.todos.filter(t => !t.checked),
        dones: state => state.todos.filter(t => t.checked)
    };
    
    const mutations: MutationTree<State> = {
        addTodo(state, newTodo) {
            const copy = {
                ...newTodo
            };
            state.todos.push(copy);
        },
        toggleTodo(state, todo) {
            todo.checked = !todo.checked;
        }
    };
    
    const actions: ActionTree<tate, any> = {
        addTodoAsync(context, id) {
            fetch('https://jsonplaceholder.typicode.com/posts/'+id)
                .then(data => data.json())
                .then(item => {
                    const todo: Todo = {
                        checked: false,
                        text: item.title
                    }
    
                    context.commit('addTodo', todo);
                })
        }
    }
    
    export const todos = {
        actions,
        state,
        mutations,
        getters
    };
  • 相关阅读:
    ADB server didn't ACK * failed to start daemon *
    老调重弹:年龄大了,码农何去何从(转)
    HR给应届生的黄金面试技巧
    Android自动开关机实现
    [Android实例] Android ShakeDetector(摇晃检测)教程详解
    Hadoop : MapReduce中的Shuffle和Sort分析
    获得和裁剪图片
    android bitmap compress(图片压缩)
    知识签名(signature of knowledge)
    SVN安装(eclipse)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10784633.html
Copyright © 2011-2022 走看看