vuex之getter(二)


說明

  • 使用vue,如果想對data數據派生一些狀態,我們就用到計算屬性或者偵聽器,同樣vux想要派生state中的一些狀態,可以在store中定義一個getters屬性,它相當於state的計算屬性。只有它的依賴發生改變了,它的值才會被重新計算。

基本使用

  • 使用起來也非常的簡單,第一個參數默認為state,第二個參數即為自己getters,通過這兩個參數,我們可以訪問state以及getters的數據。通過return返回計算的的結果即可,此時子組件可以通過$store.getters.xxx 訪問此屬性了
    var store = new Vuex.Store({
        state:{
            count: 0,
            msg: '你媽在哪里',
            msg1: '在家'
        },

        getters: {
            msgFilter:  (state, getters) =>{
                return state.msg.replace('你媽', '媽媽')
            }
        }
    })
    //App組件
    <template>
      <div>
        <h2>App組件</h2>
        //這里輸出 媽媽在哪里
        <h3>{{$store.getters.msgFilter}}</h3>
      </div>
    </template>
  • 返回一個方法
    • 有時候我們需要根據用戶傳入的值來返回特定的狀態,此時我們可以讓getters返回一個方法,可以向該方法傳入我們的需要的數據。可以傳入多個參數。
    getters: {
        msgFilter: (state, getters) =>{
            return state.msg.replace('你媽', '媽媽')
        },

        anwserMsg: state => (msg1, msg2) =>{
            return msg1 +  + msg2
        }

    }

    //App組件
    //打印 媽媽說:我在家,你在哪里?
    <h3>媽媽說:{{ $store.getters.anwserMsg('我在家,', '你在哪里?')}}</h3>
  • 通過mapGetters映射成局部的computed
    • 與mapState一樣,需要改名字,就傳入一個對象,否則傳入一個數組
  computed: {
    //把msgFilter 修改成了 msg1
    //  anwserMsg 修改成了 msg2
    ...mapGetters({
      msg1: 'msgFilter',
      msg2: 'anwserMsg'
    }),

    //默認原來的名字
    ...mapGetters([
      'msgFilter',
      'anwserMsg'
    ])
  }
  • 注意: 它與state一樣,不能直接在子組件里面修改它值,只能通過提交的方式來修改它的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM