Запіс на курсы па HTML, CSS, JavaScript, PHP, Python, фрэймворкам і CMS,
а таксама: дапамога ў пошуку працы і заказаў, стажыроўка на рэальных праектах→
⊗jsnxPmRtNFP 23 of 57 menu

Памылка недапушчальнага параметра ў NextJS

У папярэдніх уроках мы аддавалі 404 памылку ў тым выпадку, калі роўт для дадзенага URL не быў знойдзены. Аднак, у выпадку дынамічнага роўта можа быць такая сітуацыя, калі роўт існуе, але значэнне параметра няправільнае.

Давайце паглядзім на прыкладзе. Хай у нас ёсць маршрут наступнага выгляду: /user/:id.

Хай у нас таксама ёсць аб'ект з карыстальнікамі:

let users = { 1: 'user1', 2: 'user2', 3: 'user3', 4: 'user4', 5: 'user5', };

Хай мы хочам паказваць карыстальніка па яго id:

export default function User({ params }) { return <p> { users[params.id] } </p>; }

Відавоўчна, што id у URL можа быць не любым, а толькі адным з ключоў нашага аб'екта. Спроба звярнуцца на неіснуючы адрас /user/6 павінна прыводзіць да таго, што будзе выдавацца памылка. Давайце выправім код нашага кампанента і вывядзем тэкст з памылкай:

export default function User({ params }) { if (users[params.id]) { return <p> { users[params.id] } </p>; } else { return <p> user not found </p>; } }

Гэтага, аднак, недастаткова. Бо ў дадзеным выпадку мы звяртаемся да неіснуючай старонкі, а значыць павінны аддаць HTTP статус 404. Робіцца гэта з дапамогай спецыяльнай функцыі notFound, убудаванай у NextJS.

Давайце імпартаваць гэтую функцыю:

import { notFound } from 'next/navigation';

А цяпер будзем выклікаць яе ў тым выпадку, калі значэнне параметра некарэктна:

export default function User({ params }) { if (users[params.id]) { return <p> { users[params.id] } </p>; } else { return notFound(); } }

Поўны код нашага кампанента будзе выглядаць наступным чынам:

import { notFound } from 'next/navigation'; let users = { 1: 'user1', 2: 'user2', 3: 'user3', 4: 'user4', 5: 'user5', }; export default function User({ params }) { if (users[params.id]) { return <p> { users[params.id] } </p>; } else { return notFound(); } }

Вырашыце апісаную праблему ў вашых кампанентах.

byru