“One small feature in the Next.js App Router that I think more developers should use is notFound().”這是一位開發者在博客里寫下的原話。說實話,當我翻看大量實際項目的頁面代碼時,發現根本沒幾個人聽進去。
絕大多數代碼庫還在用最原始的辦法處理缺失數據——寫個條件判斷,沒拿到數據就返回個
“找不到”
,或者手搓個重定向。你以為這樣很穩妥?但Next.js早就給了你一個內置函數,偏偏不用,非要在每個頁面里重復造輪子。
![]()
notFound() 這個函數輕到幾乎沒存在感,但它背后干的事比表面多得多。我把它值得用的理由拆成五條,看完你還想手動擋的話,算你狠:
第一,它返回的是一個真正的 HTTP 404 狀態碼。你自己寫個“頁面不存在”的 UI 只是自欺欺人,瀏覽器和搜索引擎拿到的還是 200,這直接污染 SEO 和監控數據。notFound() 一調用,狀態碼立刻切到 404,沒廢話。
第二,它自動加載 not-found.tsx 頁面。你什么都不用配,只要在目錄里放好這個文件,notFound() 就會把它渲染出來。換句話說,你的頁面組件里不會塞一堆 if/else 來判斷有無數據,UI 層面和邏輯層面干凈地切開了。
第三,執行立刻中斷。調用 notFound() 之后,函數里剩下的代碼不會跑,你不用擔心后續邏輯誤把 undefined 當對象操作,也不用補多余的 return。這種“一了百了”的停止方式在復雜頁面里特別管用。
第四,頁面組件徹底卸掉負擔。數據獲取和錯誤展示本就不該耦合在一起,手動處理時很容易把整個組件弄成 if 地獄。換成 notFound(),正常數據渲染的代碼路徑和 404 的路徑完全分離,可讀性直接上一個臺階。
第五,它就是 Next.js 的標準模式。團隊里有人接手代碼時,看到 notFound() 就知道意圖,不用猜你是故意返回假頁面還是忘了補狀態碼。一致性這件事,靠約定不如靠框架強制。
還有一個容易被忽略的細節:如果你壓根沒創建自定義的 not-found.tsx,Next.js 會自動兜底,拋出一個默認的 404 頁面。也就是說,你甚至不需要先畫好頁面,就能先讓應用在出錯時表現得像個成熟的產品。
功能不大,但恰恰是這種小東西,讓一個代碼庫從“能跑”變成了“交付級”。說白了,別再用 200 狀態碼假裝沒有 404 了。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.