Vuex中如何getters動態(tài)獲取state的值
Vuex getters動態(tài)獲取state的值
在做項目時,getters里有很多冗余代碼,但是仔細一看可以根據(jù)參數(shù)來解決,于是決定使用傳參來進行獲取,減少代碼冗余。
案例
需求:在getters里能夠根據(jù)值動態(tài)獲取到people的元素。經(jīng)過多次嘗試,最終得到下面的代碼。
state.js代碼如下:
export default { people: [ { name: 'zs', age: 14 }, { name: 'ss', age: 24 }, { name: 'gh', age: 34 } ] }
getters.js代碼如下:
const getters = { // 根據(jù)index獲取state.person[index] getPerson: function (state) { // console.log(state) return function (index) { return state.people[index] } }, // 獲取state.person[0] getPerson1: function (state) { // console.log('getPerson1:', state.people[0]) // console.log(typeof getters.getPerson) return function // console.log(getters.getPerson(state)(1)) 注: state不傳過去的話,getPerson()找不到state return getters.getPerson(state)(1) // 成功獲取state.person[0] }, getPerson2: function (state) { return getters.getPerson(state)(2) // 成功獲取到state.person[1] } } export default getters
說明
因為項目中數(shù)據(jù)還要響應(yīng)式,因此我使用setInterval方法來模擬是否會實時更新,事實證明可以,因此可以推薦用這種方法。
Vuex state值更改但是getters未更新
實現(xiàn)效果
選擇一種交通工具則出現(xiàn)對應(yīng)的席別列表。
state:
seatList: {},//初始席別
最后state結(jié)果:
seatList: { '1':[{ code:"101", name:'經(jīng)濟艙' },{ code:"102", name:'公務(wù)艙' }], '2':[{ code:"201", name:'商務(wù)座' }, ... ] },
getters:
seatListItem:(state)=>(key)=>{ let list=state.common.seatList; return list[key]?list[key]:[] },
mutations:
SET_SEAT_LIST: (state,data) => { state.seatList = null;//問題出現(xiàn)在此處,對象要先置為null再賦值就可 state.seatList= data; },
template:
<!-- 席別--> <el-select v-if="scope.row.vehicleCode&&seatListItem(scope.row.vehicleCode)" placeholder="" size="small" class="selectWidth" @change="handleChangeSeatType($event,scope.$index,receiptTableArr)" v-model="scope.row.seatName" :disabled="types == 'look'||!scope.row.vehicleCode" v-bind:class="[types == 'look'?'numberStyleLocck':'','clearCursor']"> <el-option v-for="(item,itenIndex) in seatListItem(scope.row.vehicleCode)" :label="item.value" :value="item" :key="itenIndex" ></el-option> </el-select>
computed:
computed: { ...mapState({ vehicleList: state => state.vehicleList,//交通工具 seatList: state => state.seatList,//席別 }), ...mapGetters(['seatListItem']) },
methods:
getVehicleList(other){ getVehicleSeatList({ type:'JT', other }).then((res)=>{ if(res.data.code==200){ const data = res.data.data; let seatList= this.$store.state.seatList; if(!seatList[other]){ seatList[other]=data } this.$store.commit('SET_SEAT_LIST', seatList, params.other); } else { this.$message.warning('獲取交通工具席別失敗'); return false } }) },
最后發(fā)現(xiàn),在mutations中要先將state設(shè)置為空然后再賦值,否則不更新。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
在vue項目創(chuàng)建的后初始化首次使用stylus安裝方法分享
下面小編就為大家分享一篇在vue項目創(chuàng)建的后初始化首次使用stylus安裝方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01webstrom Debug 調(diào)試vue項目的方法步驟
這篇文章主要介紹了webstrom Debug 調(diào)試vue項目的方法步驟,詳細的介紹了兩種調(diào)試vue項目的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07vue服務(wù)器代理proxyTable配置如何解決跨域
這篇文章主要介紹了vue服務(wù)器代理proxyTable配置如何解決跨域問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04Vs-code/WebStorm中構(gòu)建Vue項目的實現(xiàn)步驟
本文主要介紹了在Vs-code/WebStorm中構(gòu)建Vue項目,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2022-08-08詳解Vue的computed(計算屬性)使用實例之TodoList
本篇文章主要介紹了詳解Vue的computed(計算屬性)使用實例之TodoList,具有一定的參考價值,有興趣的可以了解一下2017-08-08