zoukankan      html  css  js  c++  java
  • vue.js使用vuex

    官网:https://vuex.vuejs.org/zh/
    computed和watch区别:https://www.jianshu.com/p/a69a9bac9dc3
    1.安装vuex:https://vuex.vuejs.org/zh/installation.html
    npm安装方式,vscode中执行命令:npm install vuex --save,开发、生产皆需要
    2.创建文件/src/store/index.js导入vue和vuex:import Vue from 'vue'/import Vuex from 'vuex'/Vue.use(Vuex),使用Vue.use(Vuex)这一句,会执行Vuex的install方法来初始化vuex。
    3.创建vuex对象:const = new Vuex.Store({state:{},mutations:{},actions:{},getters:{},modules:{}});
    4.导出vuex store对象:export default store
    5.在main.js中引用store:import store from './store',并注入到全局变量中,这样在xxx.vue文件中就可以使用了,示例:{{$store.state.moreCount}}

    import Vue from 'vue'
    import App from './App'
    import router from './router'
    import store from './store/index'
    
    Vue.config.productionTip = false
    
    /* eslint-disable no-new */
    new Vue({
      el: '#app',
      router,
      store,
      components: { App },
      template: '<App/>'
    })

    6.修改state的时候,使用mutations来修改,插件(devtools)记录state变化前后的值,方便调试;当修改state前有异步操作(网络请求)的时候,使用actions,在actions中再使用mutations修改state。
    7.mutations示例:increment(state, payload) {state.count += payload.step;},state是默认的参数,payload参数可选。
    调用mutations示例:add() {this.$store.commit("increment", { step: 10 });}或者add() {this.$store.commit({type:"increment", payload:{ step: 10 }});},两种提交方式payload参数略有不同,第二种payload是包含了type的一个对象。
    mutations命名可以使用字符串:['add'](){...},把mutations的方法名字抽出来放到mutations-type.js里。
    8.getters,类似计算属性,参数:state, getters, rootState, rootGetters,使用的时候直接写this.$store.getters.stus1,参数是自动的,不需要传。

    stus1(state, getters, rootState, rootGetters) {
                return state.stus.filter(x => x.age > 10);
            },
            stus1Length(state, getters, rootState, rootGetters) {
                return getters.stus1.length;
            },

    getters传参:在getters里return一个带参数的function就行了

    stus2(state) {
                // return function (age) { 
                //     return state.stus.filter(x => x.age > age);
                // }
    
                // 简写
                return (age) => {
                    return state.stus.filter(x => x.age > age);
                }
            }

    9.actions,当有异步操作时,在actions中完成。调用actions:this.$store.dispatch('aUpdateInfo',{name:'jay'});第二个参数是payload。
    示例代码:

    import Vue from 'vue'
    import Vuex from 'vuex'
    Vue.use(Vuex)
    
    const stus = [{ name: 'jay1', age: 16 }, { name: 'jay2', age: 20 }, { name: 'jay3', age: 30 }];
    const store = new Vuex.Store({
        state: {
            count: 100,
            moreCount: 0,
            stus: stus
        },
        mutations: {
            increment(state, payload) {
                state.count += payload.step;
            },
            decrement(state, payload) {
                state.count -= payload.step;
            },
            updateCount(state, payload) {
                state.moreCount = state.count * payload.multipleQty;
            }
        },
        actions: {
            updateInfoActions(context) {
                setTimeout(() => {
                    context.commit('updateCount', { multipleQty: 20 });
                }, 1000);
            }
        },
        getters: {
            // 计算属性
            powerCount(state, getters) {
                return state.count * state.count;
            },
            stus1(state, getters, rootState, rootGetters) {
                return state.stus.filter(x => x.age > 10);
            },
            stus1Length(state, getters, rootState, rootGetters) {
                return getters.stus1.length;
            },
            stus2(state) {
                // return function (age) { 
                //     return state.stus.filter(x => x.age > age);
                // }
    
                // 简写
                return (age) => {
                    return state.stus.filter(x => x.age > age);
                }
            }
        },
        modules: {}
    })
    export default store
  • 相关阅读:
    lintcode69- Binary Tree Level Order Traversal- easy
    lintcode378- Convert Binary Search Tree to Doubly Linked Lis- medium
    lintcode448- Inorder Successor in Binary Search Tree- medium
    lintcode94- Binary Tree Maximum Path Sum- medium
    lintcode475- Binary Tree Maximum Path Sum II- medium
    *lintcode246- Binary Tree Path Sum II- easy
    lintcode376- Binary Tree Path Sum- easy
    lintcode619- Binary Tree Longest Consecutive Sequence III- medium
    lintcode614- Binary Tree Longest Consecutive Sequence II- medium
    gstreamer在Ubuntu下构建开发环境 分类: ffmpeg-SDL-VLC-Live555 2015-04-07 17:56 324人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/xsj1989/p/13896156.html
Copyright © 2011-2022 走看看