在使用vuex的時(shí)候出現(xiàn)commit未定義錯(cuò)誤的解決
使用vuex的時(shí)候出現(xiàn)commit未定義錯(cuò)誤
出現(xiàn)的原因
- 書(shū)寫(xiě)錯(cuò)誤
- 當(dāng)然,這個(gè)錯(cuò)誤不是你單詞書(shū)寫(xiě)錯(cuò)誤
- 只要的原因是因?yàn)槟愕倪@個(gè) 方法里面沒(méi)有 commit 這個(gè)方法
- 為什么沒(méi)有?其實(shí)它是有的,只不過(guò)在 context 里面
- 你可能是直接寫(xiě) commit(xxx)了
錯(cuò)誤展現(xiàn)過(guò)程
首先我們先調(diào)用一下
<div><input type="button" @click="$store.dispatch('listMore')" value="加載更多"></div>
為什么是 dispatch ,因?yàn)槟悴皇怯?commit 了嗎?
這個(gè)就是在 actions 里面調(diào)用 mutations 里面的方法的
然后就是代碼:
actions = { login(context){ commit("CHANGE_USERNAME") } } };
- 可以看到接受了一個(gè)參數(shù),這個(gè)參數(shù)是它默認(rèn)傳的,你不能改變
- commit 在 context 里面,但是你是直接寫(xiě)
正確調(diào)用的話可以這樣來(lái)寫(xiě):
actions = { login(context){ context.commit("CHANGE_USERNAME") } } };
或者這樣:
actions = { login({commit}){ //加 { } commit("CHANGE_USERNAME") } } };
vuex模塊化 commit()時(shí)報(bào)錯(cuò) unknown mutation type:xxx
廢話不多說(shuō)直接上問(wèn)題
我寫(xiě)了兩個(gè)組件,準(zhǔn)備練習(xí)Vuex的模塊化
這是Count模塊(計(jì)數(shù)作用)的js
increment方法觸發(fā)后,由于邏輯十分簡(jiǎn)單我就直接給到了mutations
讓他加
? methods: { ? ? increment() { ? ? ? this.$store.commit("INCREMENT", this.n); ? ? }, ? ? decrement() { ? ? ? this.$store.commit("DECREMENT", this.n); ? ? }, ? ? incrementOdd() { ? ? ? this.$store.dispatch("incrementOdd", this.n); ? ? }, ? ? incrementWait() { ? ? ? this.$store.dispatch("incrementWait", this.n); ? ? }, ? },
? ? mutations: { ? ? ? ? // 加 ? ? ? ? INCREMENT(state, value) { ? ? ? ? ? ? state.sum += value; ? ? ? ? }, ? ? ? ? // 減 ? ? ? ? DECREMENT(state, value) { ? ? ? ? ? ? state.sum -= value; ? ? ? ? } ? ? }, ? ? state: { ? ? ? ? sum: 0, ? ? ? ? bigSum: 0, ? ? },
這是Person模塊(添加人員作用)的js
add方法觸發(fā)后將信息封裝成對(duì)象直接給到mutations,然后一個(gè)unshift新增即可
? methods: { ? ? add() { ? ? ? const personObj = { id: nanoid(), name: this.name }; ? ? ? console.log(this.$store); ? ? ? this.$store.commit("ADD_PERSON", personObj); ? ? ? this.name = ""; ? ? }, ? },
? ? mutations: { ? ? ? ? ADD_PERSON(state, personObj) { ? ? ? ? ? ? state.personList.unshift(personObj); ? ? ? ? }, ? ? },
然后這是storejs
import Vue from 'vue' // 引用vuex import Vuex from 'vuex'; // 使用vuex Vue.use(Vuex) import CountOptions from './count'; import PersonOptions from './person'; // 創(chuàng)建并暴露store export default new Vuex.Store({ ? ? modules:{ ? ? ? ? countAbout:CountOptions, ? ? ? ? personAbout:PersonOptions, ? ? } })
就這樣,run起來(lái)后,
- 觸發(fā)increment(數(shù)字+) ==> 成功
- 觸發(fā)add(加一個(gè)人) ==> unknown mutation type:ADD_PERSON
于是我把$store撈出來(lái),找到_mutations
發(fā)現(xiàn)我的添加人員的add指向的的mutation 外面包了一層,
完事我將這一層加上去,成功實(shí)現(xiàn),
然后我將Count的加上countAbout反而報(bào)錯(cuò)
那么問(wèn)題來(lái)了,為啥我兩個(gè)模塊的寫(xiě)法是一樣,然后調(diào)用的模塊的情況也是一樣的(count.vue==>count模塊,person.vue==>person模塊),一個(gè)包了一個(gè)沒(méi)包,于是我懷疑是引入順序的問(wèn)題,覺(jué)得第一個(gè)引入的模塊不包,于是我將模塊的引入,聲明甚至組件的順序都調(diào)換了順序,然而并沒(méi)有什么軟用。。。
于是我寫(xiě)了一個(gè)臨時(shí)的test模塊。分別copy Count,Person模塊的js,
然后我以為是命名的問(wèn)題,因?yàn)槲业膬蓚€(gè)模塊的命名一個(gè)有下劃線,一個(gè)沒(méi)有下劃線,于是:
發(fā)現(xiàn)并不是
于是我有寫(xiě)了兩個(gè)測(cè)試模塊 test demo
發(fā)現(xiàn)除了count,其他都包了
最后發(fā)現(xiàn)是我的count的開(kāi)啟命名空間namespaced的d忘了寫(xiě)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue數(shù)據(jù)雙向綁定原理及簡(jiǎn)單實(shí)現(xiàn)方法
vue數(shù)據(jù)雙向綁定是通過(guò)數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式來(lái)實(shí)現(xiàn)的.本文重點(diǎn)給大家介紹Vue數(shù)據(jù)雙向綁定原理及簡(jiǎn)單實(shí)現(xiàn)方法,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-05-05vue通過(guò)watch對(duì)input做字?jǐn)?shù)限定的方法
本篇文章主要介紹了vue通過(guò)watch對(duì)input做字?jǐn)?shù)限定的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Vue添加請(qǐng)求攔截器及vue-resource 攔截器使用
這篇文章主要介紹了Vue添加請(qǐng)求攔截器及vue-resource 攔截器使用,需要的朋友可以參考下2017-11-11vue中手機(jī)號(hào),郵箱正則驗(yàn)證以及60s發(fā)送驗(yàn)證碼的實(shí)例
下面小編就為大家分享一篇vue中手機(jī)號(hào),郵箱正則驗(yàn)證以及60s發(fā)送驗(yàn)證碼的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Vue3+Vite項(xiàng)目使用mockjs隨機(jī)模擬數(shù)據(jù)
這篇文章主要介紹了Vue3+Vite項(xiàng)目使用mockjs隨機(jī)模擬數(shù)據(jù),需要的朋友可以參考下2023-01-01使用Vue和Firebase實(shí)現(xiàn)后臺(tái)數(shù)據(jù)存儲(chǔ)的示例代碼
在現(xiàn)代 web 應(yīng)用開(kāi)發(fā)中,前端和后端的無(wú)縫協(xié)作至關(guān)重要,借助 Firebase 等云計(jì)算解決方案,前端開(kāi)發(fā)者可以輕松實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)與實(shí)時(shí)更新,本文將為大家詳細(xì)介紹如何利用 Vue 3 的 Composition API 和 Firebase 實(shí)現(xiàn)后臺(tái)數(shù)據(jù)存儲(chǔ),需要的朋友可以參考下2024-10-10vue通過(guò)數(shù)據(jù)過(guò)濾實(shí)現(xiàn)表格合并
這篇文章主要為大家詳細(xì)介紹了vue通過(guò)數(shù)據(jù)過(guò)濾實(shí)現(xiàn)表格合并,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07vue轉(zhuǎn)react useEffect的全過(guò)程
這篇文章主要介紹了vue轉(zhuǎn)react useEffect的全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09