Génération dynamique de liens dans NextJS

Supposons que nous ayons un fichier avec des données d'utilisateurs :

/app/users/users.jsexport default users = [
  {
    id: 1,
    name: 'name1',
    surn: 'surn1',
  },
  {
    id: 2,
    name: 'name2',
    surn: 'surn2',
  },
  {
    id: 3,
    name: 'name3',
    surn: 'surn3',
  },
];

Créons deux composants. Le premier composant affichera la liste des utilisateurs avec des liens vers leur description détaillée. Le deuxième composant affichera cette description détaillée.

Supposons que l'URL /users/list affiche la liste de tous les utilisateurs, et l'URL /users/show/:id - un utilisateur spécifique par son id.

Pour cela, créons la structure de fichiers suivante :

Créons le premier composant, dans lequel nous générerons dynamiquement des liens dans une boucle, en y insérant le id de chaque utilisateur :

app/users/list/page.jsximport users from '../users.js';
import Link from 'next/link';

export default function List() {
  let list = users.map(user => {
    return <li>
      <Link href={`/users/show/${user.id}`}>
        {user.name}
      </Link>
    </li>;
  });
  
  return <ul>
    {list}
  </ul>;
}

Créons un composant pour afficher un utilisateur spécifique par son id :

app/users/show/[id]/page.jsximport users from '../../users.js';

export default function User({params}) {
  let user = users[params.id];
  
  return <div>
    <span>{user.id}</span>
    <span>{user.name}</span>
    <span>{user.surn}</span>
  </div>;
}
Задание 1

Soit le tableau suivant :

/app/prods/prods.jslet prods = [
  {
    id: 1,
    name: 'prod1',
    cost: 100,
    desc: 'desc1',
  },
  {
    id: 2,
    name: 'prod2',
    cost: 200,
    desc: 'desc2',
  },
  {
    id: 3,
    name: 'prod3',
    cost: 300,
    desc: 'desc3',
  },
];

Créez deux composants. Que le premier affiche la liste des produits sous forme de liens vers la description complète du produit. Que le deuxième composant affiche la description détaillée du produit.

Задание 2

Faites en sorte que si un id d'un produit inexistant est passé dans l'URL, une erreur 404 soit affichée à l'écran.