zoukankan      html  css  js  c++  java
  • vue.js之【vuex】

    vuex

    合在一起写Vuex.Store

    目录结构:

      | src

        | store.js

    引入:

    import Vue from 'vue'
    import Vuex from 'vuex'
    

    使用vuex

    Vue.use(Vuex);
    

    定义一个state

    var state = {
    	count: 10
    };
    

    mutations

    const mutations = {
    	increment(state) { //处理状态(数据)变化
    		state.count++;
    	},
    	decrement(state) {
    		state.count--;
    	}
    };
    

    actions:

    const actions = {
    	increment: ({ //处理你要干什么,异步请求,判断,流程控制
    		commit
    	}) => {
    		commit('increment')
    	},
    	decrement: ({
    		commit
    	}) => {
    		commit('decrement');
    	},
    	clickOdd: ({
    		commit,
    		state
    	}) => {
    		if (state.count % 2 == 0) {
    			commit('increment')
    		}
    	},
    	clickAsync: ({
    		commit
    	}) => {
    		new Promise((resolve) => { //Promise异步
    			setTimeout(function() {
    				commit('increment');
    
    				resolve();
    			}, 1000);
    		});
    	}
    };
    

    getters

    const getters = {
    	count(state) {
    		return state.count;
    	},
    	getOdd(state) {
    		return state.count % 2 == 0 ? '偶数' : '奇数';
    	}
    };
    

    需要导出Store对象

    export default new Vuex.Store({
    	state,
    	mutations,
    	actions,
    	getters
    });
    

    将vuex拆分开来写

    目录结构:

      |src

        |store

          | index.js

          | actions.js

          | mutations.js

          | types.js

          | getters.js

     App.vue

    <template>
      <div id="app">
        <input type="button" value="增加" @click="increment">
        <input type="button" value="减少" @click="decrement">
        <input type="button" value="偶数才能点击+" @click="clickOdd">
        <input type="button" value="点击异步" @click="clickAsync">
         {{count}}  {{getOdd}}
      </div>
    </template>
    <script>
      import {mapGetters, mapActions} from 'vuex'
      export default{
        computed:mapGetters([
          'count',
          'getOdd'
        ]),
        methods:mapActions([
          'increment',
          'decrement',
          'clickOdd',
          'clickAsync'
        ])
      }
    </script>
    

    main.js

    import store from './store/'
    new Vue({
    	store,
    	el: '#app',
    	render: h => h(App)
    })
    

    index.js

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

    actions.js

    import * as types from './types'
    
    export default {
    	increment: ({
    		commit
    	}) => {
    		commit(types.INCREMENT);
    	},
    	decrement: ({
    		commit
    	}) => {
    		commit(types.DECREMENT);
    	},
    	clickOdd: ({
    		commit,
    		state
    	}) => {
    		if (state.mutations.count % 2 == 0) {
    			commit(types.INCREMENT);
    		}
    	},
    	clickAsync: ({
    		commit
    	}) => {
    		new Promise((resolve) => {
    			setTimeout(function() {
    				commit(types.INCREMENT);
    			}, 1000);
    		})
    	}
    }
    

    mutations.js

    import {
    	INCREMENT,
    	DECREMENT
    } from './types'
    import getters from './getters'
    
    const state = {
    	count: 20
    };
    
    const mutations = {
    	[INCREMENT](state) {
    		state.count++;
    	},
    	[DECREMENT](state) {
    		state.count--;
    	}
    };
    
    export default {
    	state,
    	mutations,
    	getters
    }
    

    types.js

    export const INCREMENT = 'INCREMENT';
    
    export const DECREMENT = 'DECREMENT';
    

    getters.js

    export default {
    	count: (state) => {
    		return state.count;
    	},
    	getOdd: (state) => {
    		return state.count % 2 == 0 ? '偶数' : '奇数'
    	}
    }
    

    一 state

    1.state是唯一的数据源。

    2.单一的状态树。

    二 getters

    1.通过getter可以派生出一些新的状态。

     mutations

    1.更改vuex的store中的状态的唯一方法是提交mutation。

    四,actions

    1.action提交的是mutation,而不是直接变更状态。

    2.action可以包含任意异步状态。

    五.Modules

    面对复杂的应用程序,当管理的状态比较多时,我们需要将vuex的store对象分割成模块(modules)。

  • 相关阅读:
    Android——继续深造——从安装Android Studio 2.0开始(详)
    PHP——安装wampserver丢失MSVCR110.dll
    Marza Gift for GDC 2016
    Retrieve OpenGL Context from Qt 5.5 on OSX
    Space Time Varying Color Palette
    Screen Space Depth Varying Glow based on Heat Diffusion
    Visualization of Detail Point Set by Local Algebraic Sphere Fitting
    Glass Dragon
    Jump Flood Algorithms for Centroidal Voronoi Tessellation
    京都之行
  • 原文地址:https://www.cnblogs.com/Abner5/p/6882022.html
Copyright © 2011-2022 走看看