2 votes

Pourquoi react router v6 useParams renvoie-t-il un objet avec des propriétés potentiellement 'undefined'?

Pourquoi react router v6 useParams renvoie un objet avec des propriétés potentiellement 'undefined' ?

Dans mon code ci-dessous, mon IDE indique const slug: string | undefined.

const { slug } = useParams<"slug">();

C'est à cause de la definition de type Params:

/**
 * Les paramètres qui ont été analysés à partir du chemin d'URL.
 */
export type Params = {
  readonly [key in Key]: string | undefined;
};

Mais pourquoi Params n'est-il pas défini comme ceci (sans le | undefined):

export type Params = {
  readonly [key in Key]: string;
};

Si une route avec un paramètre correspond à l'URL alors le paramètre ne peut pas être undefined. Alors, y a-t-il un cas où useParams renvoie avec un paramètre undefined ?

3voto

Drew Reese Points 1957

Les paramètres de route peuvent être potentiellement indéfinis si le chemin n'a pas de paramètres définis.

Exemple: "/chemin/vers/page"

Il n'y a pas de paramètres de correspondance de route à accéder.

Si vous tentiez d'accéder à un paramètre

const { id } = useParams();

alors id est bien sûr indéfini.

0voto

André Pena Points 6989

Je crois que c'est un choix de conception discutable pour les développeurs. React Router 6 ne prend pas en charge les paramètres optionnels, donc il n'y a pas de raison apparente, mais même s'il le prenait en charge, ce devrait être à l'utilisateur de déterminer quels paramètres sont optionnels.

Une façon de contourner cela est la suivante:

export type MyParams = {
  a: string;
  b: string;
  c: string;
};

const { a, b, c } = useParams() as MyParams;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X