Est-il possible de passer un objet via le composant Link
dans react-router?
Quelque chose comme:<Link to='home' params={{myObj: obj}}> Click </Link>
De la même manière que je passerais props
du composant Parent
à Child
.
Si ce n'est pas possible, quelle est la meilleure façon d'y parvenir:
J'ai une application React + Flux, et je rends le tableau avec des données. Ce que j'essaie de faire, c'est quand je clique sur l'une des lignes, cela me prendrait à certains détails composant pour cette ligne. La ligne a toutes les données dont j'ai besoin, donc j'ai pensé que ce serait génial si je pouvais simplement les passer par Link
.
L'autre option serait de passer le id
de la ligne dans l'url, de le lire dans le composant details et de demander les données au magasin pour par ID.
Je ne sais pas quelle est la meilleure façon d'atteindre ce qui précède ...
Donc, ma conclusion finale sur cette question est que je n'y ai pas réfléchi correctement. Il me semblait naturel de simplement passer mes données via le Link
pour pouvoir y accéder dans mon composant Child
. Comme Colin Ramsay mentionné il y a quelque chose appelé state
dans le Link
mais ce n'est pas la façon de le faire. Cela fonctionnerait correctement lorsque les données sont passées par Link
uniquement si l'utilisateur clique sur quelque chose et est dirigé vers le composant Child
.
Le problème survient lorsque l'utilisateur accède au url
qui est utilisé dans Link
alors il n'y a aucun moyen d'obtenir les données.
Donc, la solution dans mon cas était de passer les paramètres ID
dans Link
puis de vérifier si mon Store
a les données (l'utilisateur y accède via Link
) puis obtenir ces données à partir du Store
.
Ou si les données ne sont pas dans le Store
appelez le action
pour récupérer les données de l'API.
Non, vous ne pouvez pas passer un objet dans params
, donc je suis d'accord avec vous que votre meilleur plan est de passer l'id à un magasin, que le magasin émette un événement CHANGE
, et demander aux composants de demander des informations au magasin.
Il est possible de passer un objet via un lien. Ajoutez vos données dans une requête plutôt que des paramètres et stringifiez l'objet:
<Link to={{
pathname: `/blog/${post.id}`,
query: {
title: post.title,
content: post.content,
comments: JSON.stringify(post.comments)
}
}}>Read More...</Link>
Ensuite, dans votre composant enfant, analysez la chaîne de retour dans un objet:
JSON.parse(this.props.comments)
Ce n'est pas possible, vous devez transmettre quelque chose qui peut être stocké dans l'URL, comme un ID de chaîne. Vous utiliseriez alors cet ID pour effectuer une recherche de l'objet.
Vous pouvez essayer de le sérialiser en JSON puis de le désérialiser du côté réception.