• <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í)百科 - 正文

    vuex 解決報(bào)錯(cuò)this.$store.commit is not a function的方法

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

    vuex 解決報(bào)錯(cuò)this.$store.commit is not a function的方法

    vuex 解決報(bào)錯(cuò)this.$store.commit is not a function的方法:Vue的項(xiàng)目中,如果項(xiàng)目簡單, 父子組件之間的數(shù)據(jù)傳遞可以使用 props 或者 $emit 等方式 進(jìn)行傳遞 但是如果是大中型項(xiàng)目中,很多時(shí)候都需要在不相關(guān)的平行組件之間傳遞數(shù)據(jù),并且很多數(shù)據(jù)需要多個(gè)組件循環(huán)使用。這時(shí)候再使用上面的方法會(huì)讓項(xiàng)目代碼變得冗長,
    推薦度:
    導(dǎo)讀vuex 解決報(bào)錯(cuò)this.$store.commit is not a function的方法:Vue的項(xiàng)目中,如果項(xiàng)目簡單, 父子組件之間的數(shù)據(jù)傳遞可以使用 props 或者 $emit 等方式 進(jìn)行傳遞 但是如果是大中型項(xiàng)目中,很多時(shí)候都需要在不相關(guān)的平行組件之間傳遞數(shù)據(jù),并且很多數(shù)據(jù)需要多個(gè)組件循環(huán)使用。這時(shí)候再使用上面的方法會(huì)讓項(xiàng)目代碼變得冗長,

    Vue的項(xiàng)目中,如果項(xiàng)目簡單, 父子組件之間的數(shù)據(jù)傳遞可以使用 props 或者 $emit 等方式 進(jìn)行傳遞

    但是如果是大中型項(xiàng)目中,很多時(shí)候都需要在不相關(guān)的平行組件之間傳遞數(shù)據(jù),并且很多數(shù)據(jù)需要多個(gè)組件循環(huán)使用。這時(shí)候再使用上面的方法會(huì)讓項(xiàng)目代碼變得冗長,并且不利于組件的復(fù)用,提高了耦合度。

    Vue 的狀態(tài)管理工具 Vuex 完美的解決了這個(gè)問題。

    看了下vuex的官網(wǎng),覺得不是很好理解,有的時(shí)候我們只是需要?jiǎng)討B(tài)的從一個(gè)組件中獲取數(shù)據(jù)(官網(wǎng)稱為“組件層級(jí)”:是個(gè)獨(dú)立的控件,作用范圍只在組件之內(nèi))然后想放到一個(gè)被官網(wǎng)稱作“應(yīng)用層級(jí)”(在項(xiàng)目的任意地方都可以隨時(shí)獲取和動(dòng)態(tài)的修改,在修改之后,vue會(huì)為你的整個(gè)項(xiàng)目做更新)的地方。這是我最初來學(xué)習(xí)vue的原因,我并不想做一個(gè)前端數(shù)據(jù)結(jié)構(gòu)庫。。

    下面看看我一步一步的小例子

    首先安裝vuex 目前公司項(xiàng)目已經(jīng)被我從vue1.0遷移到vue2.0,下載并安裝vue

    npm install vuex --save

    然后在index.html同級(jí)新建文件夾store,在文件夾內(nèi)新建index.js文件,這個(gè)文件我們用來組裝模塊并導(dǎo)出 store 的文件

    【一、獲取store中的數(shù)據(jù)】

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    // 告訴 vue “使用” vuex
    Vue.use(Vuex)
    
    // 創(chuàng)建一個(gè)對(duì)象來保存應(yīng)用啟動(dòng)時(shí)的初始狀態(tài)
    // 需要維護(hù)的狀態(tài)
    const store = new Vuex.Store({
     state: {
     // 放置初始狀態(tài) app啟動(dòng)的時(shí)候的全局的初始值
     bankInf: {"name":"我是vuex的第一個(gè)數(shù)據(jù)","id":100,"bankName":"中國銀行"}
     }
    })
    // 整合初始狀態(tài)和變更函數(shù),我們就得到了我們所需的 store
    // 至此,這個(gè) store 就可以連接到我們的應(yīng)用中
    export default store

    在vue根文件中注冊(cè)store,這樣所有的組件都可以使用store中的數(shù)據(jù)了

    我的項(xiàng)目文件結(jié)構(gòu):

    在main.js文件中注冊(cè)store

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

    這樣簡單的第一步就完成了,你可以再任意組件中使用store中的數(shù)據(jù),使用方法也很簡單,就是使用計(jì)算屬性返回store中的數(shù)據(jù)到一個(gè)新屬性上,然后在你模板中則可以使用這個(gè)屬性值了:

    任意組件中:

    export default {
     ...
     computed: {
     bankName() {
     return this.$store.state.bankInf.bankName;
     }
     },
     ...
    }

    在模板中可以直接使用bankName這個(gè)屬性了,也就是store中的中國銀行

    【二、在組件中修改store中的狀態(tài) 】

    在任意組件中添加html模板

    <div class="bank">
     <list-header :headerData="bankName"></list-header>
     04銀行詳情頁面
     <input name="" v-model="textValue">
     <button type="button" name="獲取數(shù)據(jù)" @click="newBankName"></button>
    </div>

    然后組件中提交mutation

    export default {
     ...
     computed: {
     bankName() {
     return this.$store.state.bankInf.bankName;
     }
     },
     methods: {
     newBankName: function() {
     this.$store.commit('newBankName', this.textValue)
     }
     }
     ... 
    }

    在store中的index.js中添加mutations:

    const store = new Vuex.Store({
     state: {
     // 放置初始狀態(tài) app啟動(dòng)的時(shí)候的全局的初始值
     bankInf: {"name":"我是vuex的第一個(gè)數(shù)據(jù)","id":100,"bankName":"中國銀行"},
     count:0
     },
     mutations: {
     newBankName(state,msg) {
     state.bankInf.bankName = msg;
     }
     }
    })

    這樣你發(fā)現(xiàn),在點(diǎn)擊提交按鈕的時(shí)候,頁面已經(jīng)顯示你修改的數(shù)據(jù)了,并且所有復(fù)用這個(gè)組件的地方的數(shù)據(jù)全都被vue更新了;

    如果在使用中發(fā)現(xiàn)報(bào)錯(cuò)this.$store.commit is not a function ,請(qǐng)打開你項(xiàng)目的配置文件package.json,查看你正在使用的vuex的版本,我正在使用的是vuex2.0,

    如果想刪除舊版本的vuex并安裝新版本的vuex請(qǐng)使用

    npm rm vuex --save

    然后安裝最新的vuex

    npm install vuex --save

    即可解決這個(gè)錯(cuò)誤,或者是查看vuex官網(wǎng)api修改提交mutation的語句

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

    文檔

    vuex 解決報(bào)錯(cuò)this.$store.commit is not a function的方法

    vuex 解決報(bào)錯(cuò)this.$store.commit is not a function的方法:Vue的項(xiàng)目中,如果項(xiàng)目簡單, 父子組件之間的數(shù)據(jù)傳遞可以使用 props 或者 $emit 等方式 進(jìn)行傳遞 但是如果是大中型項(xiàng)目中,很多時(shí)候都需要在不相關(guān)的平行組件之間傳遞數(shù)據(jù),并且很多數(shù)據(jù)需要多個(gè)組件循環(huán)使用。這時(shí)候再使用上面的方法會(huì)讓項(xiàng)目代碼變得冗長,
    推薦度:
    標(biāo)簽: not is function
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品亚洲一区二区三区在线| 国产精品涩涩涩视频网站| 亚洲精品国产日韩无码AV永久免费网| 久久久久成人精品无码中文字幕| 精品无人区无码乱码毛片国产| 8x福利精品第一导航| 中文字幕乱码中文乱码51精品| 久久亚洲AV永久无码精品| 在线人成精品免费视频| 精品国产第一国产综合精品| 亚洲AⅤ永久无码精品AA| 国产精品午夜国产小视频| 精品综合久久久久久97超人| 岛国精品一区免费视频在线观看| 亚洲一区精品无码| 香蕉依依精品视频在线播放| 久久www免费人成精品香蕉| 99久re热视频这里只有精品6| 国产cosplay精品视频| 国产99视频精品免视看7| 四虎国产精品永久在线观看| 亚洲国产精品人人做人人爽| 日韩精品一区二三区中文| 久久精品亚洲欧美日韩久久| 国产精品亚洲精品日韩已方| 麻豆精品久久久一区二区| 久久精品无码一区二区三区| 国产精品天天影视久久综合网| 国产成人精品日本亚洲专一区 | 国产成人精品日本亚洲网址| 精品人无码一区二区三区| 青青草原精品99久久精品66| 一本一道久久a久久精品综合 | 日本午夜精品一区二区三区电影 | 欧美成人精品第一区二区三区| 精品国产福利尤物免费| 看99视频日韩精品| 亚洲精品国产日韩无码AV永久免费网 | 久久精品国产亚洲一区二区| 国产精品免费网站| 四虎影永久在线观看精品|