問題描述
在前端頁(yè)面發(fā)請(qǐng)求到后端钧嘶,控制臺(tái)報(bào)出錯(cuò)誤createStore.js:152 Uncaught Error: Actions must be plain objects. Use custom middleware for async actions.
矛盾點(diǎn)
根據(jù)提示笔时,actions 返回值需要是一個(gè)對(duì)象,檢查代碼發(fā)現(xiàn)確實(shí)是一個(gè)對(duì)象犬耻,按照代碼走的流程檢查代碼煎谍,但沒有發(fā)現(xiàn)問題坊萝,不知道問題是出在了哪里
問題解決
- 復(fù)制錯(cuò)誤信息到瀏覽器苛预,沒有找到有價(jià)值的答案句狼,自己開始逐步的查找
- 首先在action 發(fā)異步請(qǐng)求之前console.log ,發(fā)現(xiàn)是可以打印出值的,也就是說值可以正常從container傳遞到action, 那么問題是在action發(fā)請(qǐng)求從前端到后端的的過程中热某,還是在請(qǐng)求返回后到reducer 的過程中鲜锚?
- 首先突诬,排除干擾苫拍,注釋到發(fā)請(qǐng)求的過程芜繁,將請(qǐng)求的返回值定義為定值,目的是排除因?yàn)檎?qǐng)求本身的導(dǎo)致出錯(cuò)绒极。注釋后刷新頁(yè)面骏令,發(fā)現(xiàn)錯(cuò)誤還在,那么問題肯定不是這個(gè)請(qǐng)求導(dǎo)致的垄提。
- 思考從action 到reduce 的過程,中間起橋梁作用的是middleware,middleware 的數(shù)據(jù)流動(dòng)過程為
action ---> dispatcher ---> middleware 1 ---> middleware 2 ---> reducers
,那么問題可能是middleware 出錯(cuò)了嗎浪规? - 檢查middleware的用法招刹,果然是這里寫的不對(duì),修改后解決了問題
反思
解決問題的方法
按照數(shù)據(jù)的流程审丘,從頭開始吏够,精簡(jiǎn)代碼,注釋掉不相關(guān)的干擾代碼滩报,如果注釋后代碼ok ,那么問題就在被注釋的里面锅知,否則問題就在現(xiàn)有的代碼里,抽絲剝繭脓钾,一步步的排除售睹。