報錯內容如下:
錯誤信息的意思是:未在_callee類型錯誤捕獲:傳播非迭代實例的嘗試無效
出現當前問題的原因:數據格式解析錯誤,可能在應該使用 {}
的時候使用了 []
,在應該使用 []
的時候使用了 {}
。
index.js:1 uncaught at _callee TypeError: Invalid attempt to spread non-iterable instance
at _nonIterableSpread (http://localhost:8001/umi.js:10179:9)
at _toConsumableArray (http://localhost:8001/umi.js:10354:60)
at save (http://localhost:8001/p__Channel__AreaAdd__models__getAllUserRoleList.js.async.js:65:329)
at http://localhost:8001/umi.js:15329:14
at http://localhost:8001/umi.js:15343:14
at Array.reduce (<anonymous>)
at http://localhost:8001/umi.js:15342:21
at http://localhost:8001/umi.js:15356:12
at combination (http://localhost:8001/umi.js:72234:29)
at dispatch (http://localhost:8001/umi.js:72470:22)
at http://localhost:8001/umi.js:70420:22
at http://localhost:8001/umi.js:14811:18
at http://localhost:8001/umi.js:64719:18
at dispatch (http://localhost:8001/umi.js:72025:18)
at http://localhost:8001/umi.js:71944:12
at http://localhost:8001/umi.js:70948:52
at exec (http://localhost:8001/umi.js:71625:5)
at flush (http://localhost:8001/umi.js:71666:5)
at asap (http://localhost:8001/umi.js:71639:5)
at runPutEffect (http://localhost:8001/umi.js:70945:25)
at runEffect (http://localhost:8001/umi.js:70894:184)
at next (http://localhost:8001/umi.js:70774:9)
at currCb (http://localhost:8001/umi.js:70847:7)
報錯了要仔細查看報錯信息,尋找關鍵點,當前log的關鍵信息是前四行:
第一行(概括信息):傳播非迭代實例的嘗試無效;
第二行_nonIterableSpread
:不是可迭代的擴展;
第三行_toConsumableArray
:位於可消耗的數組;
第四行(報錯點):在p__Channel__AreaAdd__models__getAllUserRoleList.js
目錄文件下的save
方法中。
由以上四行信息可以得出確切的出錯地點以及原因:
在目錄Channel/AreaAdd/models下的getAllUserRoleList.js文件中有一個save方法,在save方法中對數組進行了非法的可迭代擴展。
大概就是上面的意思,說白了就是你的數據結構錯誤。同一個數據,後臺返回的是對象,在這裏使用了數組接收,然後頁面顯示數據時又使用了對象的形式解構賦值,就報錯了,但是我發現頁面的數據顯示好像不受影響,還是顯示了,難纏哦…
下面是我出錯的地方:
// getAllUserRoleList.js
reducers: {
save(state, action) {
const { payload } = action;
return [ ...state, ...payload ]; // 錯誤
}
}
修改爲以下結構就不報錯了:
// getAllUserRoleList.js
reducers: {
save(state, action) {
const { payload } = action;
return { ...state, ...payload }; // 正確
}
}