簡單使用Vuex步驟及注意事項

使用Vuex的步驟:javascript

(1)安裝:php

  1.使用npm安裝:html

    

npm install vuex  --save

  

  2.使用script標籤引入vue

    

<script src="/path/to/vue.js"></script>

<script src="/path/to/vuex.js"></script>

  

  若是使用第一種方式安裝Vuex插件,在使用Vuex插件以前須要在main.js入口文件中java

    1‘ 使用import方式引入Vuexajax

      

import Vuex from ‘vuex’

  

    2‘ 使用Vue的插件引入函數Vue.use()使用Vuexvuex

      

Vue.use(Vuex);

  

(2)安裝以後能夠經過Vuex實例對象的Store方法建立一個store對象:npm

  

var store = new Vuex.Store({
    state:{
        NewMsg:{
            Msgs:[
                {
                    title:'暫無消息',
                    content:'暫無消息!',
                    url:'#no_msg',
                    id:'no_msg'
                }
            ]
        },
    },
    mutations:{
        modifyMsg (state,Obj){
            if(state.NewMsg.Msgs[0].id === 'no_msg'){
                state.NewMsg.Msgs.shift();
            }
            var obj = {
                title:Obj.title,
                content:Obj.content
            };
            obj.id = 'Msg_' + Obj.id;
            obj.url = '#' + obj.id;
            state.NewMsg.Msgs.push(obj);
        }
    },
    actions:{
        fetchMsg (context){
            $.ajax({
                    url:'PHP/GetMsgs.php',
                    type:'GET',
                    data:{},
                    dataType:'json',

                    success:function(response){
                        if ( typeof response === 'string') {
                            response = JSON.parse(response);
                        }
                        console.log(response);
                        $(response).each(function(k,v){
                            // console.log(v.id+v.title+v.content);
                            context.commit('modifyMsg',v);
                        });
                    }
                });
        }
    }
});

 

(3)在Vue實例中註冊store對象:json

  

new Vue({
  el: '#app',
  router,
  store,
  created (){
      store.dispatch('fetchMsg');
  },
  template: '<App/>',
  components: { App }
})

 

(4)在組件中使用state數據:後端

  必須經過computed屬性使用state數據!不然state屬性中的數據發生更改時不會反映在組件上!

  

export default {
        computed: {
            Msgs (){
                var Msgs = this.$store.state.NewMsg.Msgs;
                return Msgs;
            }
        }
    }

 

注意事項: 

  基本組成:

    注意到這個store對象包含三個子對象:

      state、mutations、actions

    其中state用於存儲數據,相似vue實例的data屬性。

    mutations用於遞交更改,對state對象中的屬性數據進行更改。

    actions用於進行遞交異步更改,經過調用mutations實現對數據的更改。

 

  actions與mutations的區別:

    其中actions區別於mutations的地方在於mutations只能進行同步更改,而actions中的更改能夠是異步執行。因此基本上全部用戶執行的直接數據更改都是觸發mutations屬性

    函數執行,而須要與後端進行數據交互的數據更改一般是經過actions屬性函數去執行。

 

  定義actions與mutations屬性函數的注意事項:

    其中定義mutations屬性函數時必須傳遞的第一個參數是state,由於要對state進行更改,第二個參數表明傳入的新參數。mutations屬性函數只接受兩個參數,若是要同時更

    改多個屬性值,能夠經過對象傳入。

     在actions屬性函數中能夠經過context.commit()方法觸發mutations屬性函數。定義actions屬性函數時,必須傳遞的第一個參數是context,用於觸發mutations函數。

 

  觸發actions與mutations屬性函數的方法:

    在子組件中經過this.$store.commit()方法觸發mutations屬性函數。在註冊store的Vue實例中(第三步中將會講到)能夠經過store.commit()觸發。

    commit函數第一個參數是mutations的屬性函數名,第二個參數是傳入的新值。

    actions屬性函數中能夠進行異步操做,好比經過ajax或者Vue.Resource()進行數據獲取,獲取數據後再經過context.commit()觸發更改。

     觸發actions屬性函數使用this.$store.dispatch()或者store.dispatch() (在註冊store的Vue實例中)函數。dispatch函數傳遞的一個參數是actions屬性函數名稱。若是但願在

    Vue實例建立完成還未掛載時就從後端獲取數據,則能夠在created鉤子函數中調用actions屬性函數。

 

  在組件中訪問數據中心state的注意事項:

    在Vue實例中能夠經過this.$store.state對象獲取state中的數據。若是但願在state中的數據發生更改以後,組件會自動更新,則應該使用組件的computed屬性定義數據,而

    不是經過data屬性定義。若是使用data定義組件數據,則state中的數據發生更改以後組件不會發生變化。

  

export default {
        computed: {
            Msgs (){
                var Msgs = this.$store.state.NewMsg.Msgs;
                return Msgs;
            }
        }
    }
相關文章
相關標籤/搜索