Cannot read property 'xxx' of undefinedresult.data is undefinedconsole.log(result) 後)點擊行號打**斷點**。result → data → 確認實際層級與屬性名稱。console.log 或 console.dirfetch('/api/user')
.then(r => r.json())
.then(result => {
console.log('API 原始回傳:', result); // 物件可展開
console.dir(result, {depth: null}); // 強制展開所有層級
console.table(result.data); // 陣列以表格顯示
// 後續邏輯...
});
| 現象 | 可能原因 | 驗證方式 |
|---|---|---|
| result.data 為 undefined | 後端回傳 { "data": [...] } 但前端寫 result.data.data | console.log(result) 看第一層鍵名 |
| 陣列長度為 0 | 查無資料、分頁參數錯、權限不足 | Network 看回應內容 |
| 屬性名稱大小寫不符 | 後端 PascalCase (UserName) 前端 camelCase (userName) | console.dir 看實際屬性名 |
| 攔截器/中間件修改回應 | Axios 攔截器 return response.data 導致雙重 .data | 檢查 axios.interceptors.response |
// 在 Sources 面板斷點右鍵 → Edit breakpoint → Condition
result && result.data && result.data.length === 0
只在符合條件時暫停,避免大量正常請求干擾。
**不要靠猜**,用 console.log/console.dir 或**斷點**直接觀察 result 真實結構,90% 的「屬性存取失敗」源於**前端預期結構與後端實際回傳不符**。養成「先印再寫」習慣,除錯效率提升十倍。