• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

    通過一個(gè)簡單的例子學(xué)會(huì)vuex與模塊化

    來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:25:08
    文檔

    通過一個(gè)簡單的例子學(xué)會(huì)vuex與模塊化

    通過一個(gè)簡單的例子學(xué)會(huì)vuex與模塊化:前言 Vuex 強(qiáng)調(diào)使用單一狀態(tài)樹,即在一個(gè)項(xiàng)目里只有一個(gè) store,這個(gè) store 集中管理了項(xiàng)目中所有的數(shù)據(jù)以及對(duì)數(shù)據(jù)的操作行為。但是這樣帶來的問題是 store 可能會(huì)非常臃腫龐大不易維護(hù),所以就需要對(duì)狀態(tài)樹進(jìn)行模塊化的拆分。 這篇文章預(yù)設(shè)你已經(jīng)了解vue
    推薦度:
    導(dǎo)讀通過一個(gè)簡單的例子學(xué)會(huì)vuex與模塊化:前言 Vuex 強(qiáng)調(diào)使用單一狀態(tài)樹,即在一個(gè)項(xiàng)目里只有一個(gè) store,這個(gè) store 集中管理了項(xiàng)目中所有的數(shù)據(jù)以及對(duì)數(shù)據(jù)的操作行為。但是這樣帶來的問題是 store 可能會(huì)非常臃腫龐大不易維護(hù),所以就需要對(duì)狀態(tài)樹進(jìn)行模塊化的拆分。 這篇文章預(yù)設(shè)你已經(jīng)了解vue

    前言

    Vuex 強(qiáng)調(diào)使用單一狀態(tài)樹,即在一個(gè)項(xiàng)目里只有一個(gè) store,這個(gè) store 集中管理了項(xiàng)目中所有的數(shù)據(jù)以及對(duì)數(shù)據(jù)的操作行為。但是這樣帶來的問題是 store 可能會(huì)非常臃腫龐大不易維護(hù),所以就需要對(duì)狀態(tài)樹進(jìn)行模塊化的拆分。

    這篇文章預(yù)設(shè)你已經(jīng)了解vue相關(guān)的基礎(chǔ)知識(shí),因此本文不再贅述。需要學(xué)習(xí)的朋友可以參考這篇文章://www.gxlcms.com/article/110212.htm

    對(duì)vuex的定位和解釋可以看官方文檔,說的很詳細(xì)了,需要的朋友也可以通過這篇文章進(jìn)行詳細(xì)的了解://www.gxlcms.com/article/111582.htm

    本文主要從實(shí)用的角度寫一寫如何在實(shí)際項(xiàng)目中使用vuex,例子真的很簡單(簡陋),但是主要是理解這種思維就好。

    示例教程

    例子是在vue-cli基礎(chǔ)上構(gòu)建的,以下是src文件下的內(nèi)容目錄。

    ├── App.vue
    ├── components // 組件文件夾
    │ ├── tab1.vue
    │ ├── tab2.vue
    │ ├── tab3.vue
    │ └── tab4.vue
    ├── main.js // vue的主文件入口
    ├── router // vue-router文件
    │ └── index.js
    └── store // vuex文件
     ├── action.js // action
     ├── getter.js // getter
     ├── index.js // vuex的主文件
     ├── module // 模塊文件
     │ ├── tab2.js
     │ └── tab3.js
     ├── mutation-type.js // mutation常量名文件
     └── mutation.js // mutation

    效果是這樣的(不要嫌棄簡陋啊啊?。?/p>

    在這個(gè)例子里,把文檔里提到的vuex的相關(guān)知識(shí)都使用了一遍,包括模塊相關(guān)的知識(shí),基本把一般的使用場(chǎng)景都覆蓋了吧。

    那不廢話了,開始吧。

    首先app.vue和router兩部分是和路由相關(guān),就是很簡單的東西,看看文檔就能了解。

    vuex的模塊化

    在寫這個(gè)例子之前看了很多的開源項(xiàng)目的代碼,一開始蠻新鮮的,畢竟之前項(xiàng)目中并沒有深度使用過vuex,基本就是一個(gè)store.js里把vuex的功能就都完成了,但是項(xiàng)目復(fù)雜肯定不能這么寫,正好現(xiàn)在有這個(gè)需求,我就想寫個(gè)例子理一理這方面的思路。結(jié)果還是蠻簡單的。

    store文件里的內(nèi)容就是按照vuex五個(gè)核心概念建立的,這么做的好處對(duì)于梳理業(yè)務(wù)邏輯和后期維護(hù)都是極大的方便,比如mutation.js和mutation-type.js這兩個(gè)文件:

    // mutation-type.js
    
    const CHANGE_COUNT = 'CHANGE_COUNT';
    
    
    export default {
     CHANGE_COUNT
    }
    // mutation.js
    
    import type from './mutation-type'
    
    let mutations = {
     [type.CHANGE_COUNT](state) {
     state.count++
     }
    }
    
    export default mutations

    將mutation中的方法名單獨(dú)作為常量提取出來,放在單獨(dú)的文件中,用的時(shí)候引用相關(guān)的內(nèi)容,這樣非常便于管理和了解有哪些方法存在,很直觀。另一方面,有時(shí)候可能需要用到action,可以使用相同的方法名,只要再引入常量的文件就行。

    // action.js
    import type from './mutation-type'
    
    let actions = {
     [type.CHANGE_COUNT]({ commit }) {
     
     commit(type.CHANGE_COUNT)
     
     }
    }
    
    export default actions

    怎么樣,這樣是不是看起來就沒有寫在一個(gè)文件里那么亂了。

    ...mapGetters和...mapActions

    tab1.vue里:

    // tab1.vue
    <template>
     <div>
     <p>這是tab1的內(nèi)容</p>
     <em @click="add">{{count}}</em>
     <p>getter:{{NewArr}}</p>
     </div>
    </template>
    
    
    <script>
    import { mapActions, mapGetters } from "vuex";
    import type from "../store/mutation-type";
    export default {
     computed: {
     ...mapGetters([
     'NewArr'
     ]),
     count: function() {
     return this.$store.state.count;
     },
     },
     methods: {
     ...mapActions({
     CHANGE_COUNT: type.CHANGE_COUNT
     }),
     add: function() {
     this.CHANGE_COUNT(type.CHANGE_COUNT);
     }
     }
    };
    </script>
    
    <style lang="" scoped>
    
    </style>

    index.js文件里:

    import Vuex from 'vuex'
    import Vue from 'vue'
    import actions from './action'
    import mutations from './mutation'
    import getters from './getter'
    import tab2 from './module/tab2'
    import tab3 from './module/tab3'
    
    Vue.use(Vuex)
    
    let state = {
     count: 1,
     arr:[]
    }
    
    
    let store = new Vuex.Store({
     state,
     getters,
     mutations,
     actions,
     modules:{
     tab2,tab3
     }
     
    })
    
    export default store

    vuex提供了一種叫做輔助函數(shù)的東西,他的好處能讓你在一個(gè)頁面集中展示一些需要用到的東西,并且在使用的時(shí)候也可以少寫一些內(nèi)容,不過這個(gè)不是必須,根據(jù)自己需要取用。

    需要說明的是,他們兩個(gè)生效的地方可不一樣。

    ...mapGetters寫在本頁面的計(jì)算屬性中,之后就可以像使用計(jì)算屬性一樣使用getters里的內(nèi)容了。

    ...mapActions寫在本頁面的methods里面,既可以在其他方法里調(diào)用,甚至可以直接寫在@click里面,像這樣:

    <em @click="CHANGE_COUNT">{{count}}</em>

    醬紫,tab1里面的數(shù)字每次點(diǎn)擊都會(huì)自增1。

    mudule

    vuex的文檔里對(duì)于模塊這部分寫的比較模糊,還是得自己實(shí)際使用才能行。

    在本例子中,我設(shè)置了兩個(gè)模塊:tab2和tab3,分別對(duì)應(yīng)著同名的兩個(gè)組件,當(dāng)然,我這樣只是為了測(cè)試,實(shí)際看tab2就可以。

    // module/tab2.js
    const tab2 = {
     state: {
     name:`這是tab2模塊的內(nèi)容`
     },
     mutations:{
     change2(state){
     state.name = `我修改了tab2模塊的內(nèi)容`
     }
     },
     getters:{
     name(state,getters,rootState){
     console.log(rootState)
     return state.name + ',使用getters修改'
     }
     }
    }
    
    export default tab2;
    // tab2.vue
    <template>
     <div>
     <p>這是tab2的內(nèi)容</p>
     <strong @click="change">點(diǎn)擊使用muttion修改模塊tab2的內(nèi)容:{{info}}</strong>
     <h4>{{newInfo}}</h4>
     </div>
    </template>
    
    
    <script>
    export default {
     mounted() {
     // console.log(this.$store.commit('change2'))
     },
     computed: {
     info: function() {
     return this.$store.state.tab2.name;
     },
     newInfo(){
     return this.$store.getters.name;
     }
     },
     methods: {
     change() {
     this.$store.commit('change2')
     }
     }
    };
    </script>
    
    <style lang="" scoped>
    
    </style>

    這個(gè)例子里主要是看怎么在頁面中調(diào)用模塊中的stated等。

    首先說state,這個(gè)很簡單,在頁面中這樣寫就行:

    this.$store.steta.tab2(模塊名).name

    在本頁面的mounted中console一下$store,可以看到模塊中,stete加了一層嵌套在state中的。

    至于action,mutation,getter,和一般的使用方法一樣,沒有任何區(qū)別。

    還有就是,在getter和action中,可以通過rootState獲得根結(jié)構(gòu)的state,mutation中沒有此方法。

    總結(jié)

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    通過一個(gè)簡單的例子學(xué)會(huì)vuex與模塊化

    通過一個(gè)簡單的例子學(xué)會(huì)vuex與模塊化:前言 Vuex 強(qiáng)調(diào)使用單一狀態(tài)樹,即在一個(gè)項(xiàng)目里只有一個(gè) store,這個(gè) store 集中管理了項(xiàng)目中所有的數(shù)據(jù)以及對(duì)數(shù)據(jù)的操作行為。但是這樣帶來的問題是 store 可能會(huì)非常臃腫龐大不易維護(hù),所以就需要對(duì)狀態(tài)樹進(jìn)行模塊化的拆分。 這篇文章預(yù)設(shè)你已經(jīng)了解vue
    推薦度:
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 99久久国产热无码精品免费 | 亚洲精品一级无码中文字幕| 国产精品视频色拍拍| 久久国产精品波多野结衣AV| 精品三级在线观看| 精品无码国产一区二区三区AV | 精品伦精品一区二区三区视频| 91视频精品全国免费观看| 最新国产精品精品视频| 久久无码精品一区二区三区| 国产精品九九久久免费视频| 国产精品久久自在自线观看| 久久精品a亚洲国产v高清不卡| 亚洲精品一级无码中文字幕 | 精品乱子伦一区二区三区高清免费播放 | 亚洲AV无码成人精品区大在线| 国产精品青草视频免费播放| 亚洲欧美日韩精品永久在线| 国产a视频精品免费观看| 精品人妻久久久久久888| 野狼第一精品社区| 国产精品视频白浆免费视频| 久久久精品国产Sm最大网站| 国产精品福利在线观看| 久久久久久极精品久久久| 国产精品自在拍一区二区不卡| 亚洲精品国产成人专区| 尤物国产在线精品福利一区| 欧美日韩精品一区二区三区| 久久r热这里有精品视频| 国产精品欧美日韩| 国内精品久久国产大陆| 精品国产美女福利到在线不卡 | 色欲久久久天天天综合网精品| 亚洲精品成人片在线播放| 最新精品露脸国产在线 | 国产精品 综合 第五页| 94久久国产乱子伦精品免费 | 91精品国产综合久久香蕉| 97精品国产97久久久久久免费| 日韩精品在线一区二区|