Error de parámetro no válido en NextJS
En lecciones anteriores, devolvíamos
404 error en el caso
cuando no se encontraba la ruta
para una URL dada. Sin embargo, en el caso
de una ruta dinámica puede haber
una situación en la que la ruta existe,
pero el valor del parámetro es incorrecto.
Veamos un ejemplo.
Supongamos que tenemos una ruta de la siguiente forma:
/user/:id.
Supongamos que también tenemos un objeto con usuarios:
let users = {
1: 'user1',
2: 'user2',
3: 'user3',
4: 'user4',
5: 'user5',
};
Supongamos que queremos mostrar el usuario por su id:
export default function User({ params }) {
return <p>
{ users[params.id] }
</p>;
}
Obviamente, el id en la URL puede ser
no cualquiera, sino solo uno de las claves
de nuestro objeto. El intento de acceder
a una dirección inexistente
/user/6 debería llevar
a que se genere
un error. Arreglemos
el código de nuestro componente y mostremos
el texto de error:
export default function User({ params }) {
if (users[params.id]) {
return <p>
{ users[params.id] }
</p>;
} else {
return <p>
user not found
</p>;
}
}
Esto, sin embargo, no es suficiente.
Después de todo, en este caso estamos accediendo
a una página que no existe,
lo que significa que debemos devolver el estado HTTP 404.
Esto se hace usando
una función especial notFound,
integrada en NextJS.
Importemos esta función:
import { notFound } from 'next/navigation';
Y ahora la llamaremos en el caso cuando el valor del parámetro es incorrecto:
export default function User({ params }) {
if (users[params.id]) {
return <p>
{ users[params.id] }
</p>;
} else {
return notFound();
}
}
El código completo de nuestro componente se verá de la siguiente manera:
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();
}
}
Resuelva el problema descrito en sus componentes.