Dans react-router v3, je pouvais y accéder avec props.location.query.foo
(Si l'emplacement actuel était ?foo=bar
)
Dans [email protected]
props.location
N’a que props.location.search
Avec une chaîne de caractères comme ?foo=bar&other=thing
.
J'ai peut-être besoin d'analyser et de déconstruire manuellement cette chaîne pour trouver la valeur de foo
ou other
.
Capture d'écran de console.log(this.props)
: (Notez comment de ?artist=band
Ici je voudrais obtenir la valeur de artist
qui est la valeur band
)
On dirait que vous avez déjà supposé correct. La possibilité d’analyser les chaînes de requête a été supprimée de la V4 car il a été demandé au fil des années de prendre en charge différentes implémentations. Avec cela, l'équipe a décidé qu'il était préférable que les utilisateurs décident de la mise en œuvre de cette implémentation. Nous vous recommandons d'importer une chaîne de requête lib. Le celui que vous avez mentionné a très bien fonctionné pour moi jusqu'à présent.
const queryString = require('query-string');
const parsed = queryString.parse(props.location.search);
Vous pouvez aussi utiliser new URLSearchParams
_ si vous voulez quelque chose d’indigène et que cela répond à vos besoins
const search = props.location.search; // could be '?foo=bar'
const params = new URLSearchParams(search);
const foo = params.get('foo'); // bar
Vous pouvez en savoir plus sur la décision ici
Vous pouvez obtenir l'erreur suivante lors de la création d'une version de production optimisée lors de l'utilisation du module query-string .
Échec de la minification du code à partir de ce fichier: ./node_modules/query-string/index.js:8
Pour surmonter cela, veuillez utiliser le module alternatif appelé stringquery qui effectue le même processus sans aucun problème lors de l'exécution de la construction.
import querySearch from "stringquery";
var query = querySearch(this.props.location.search);
Je vous remercie.
Je profère ma petite ES6
fonction de forme, génial, léger et utile:
getQueryStringParams = query => {
return query
? (/^[?#]/.test(query) ? query.slice(1) : query)
.split('&')
.reduce((params, param) => {
let [key, value] = param.split('=');
params[key] = value ? decodeURIComponent(value.replace(/\+/g, ' ')) : '';
return params;
}, {}
)
: {}
};
Tout est là, j'espère vous aider.
Heureux d'avoir trouvé ce post. Merci pour les liens, après quelques heures, mon code a finalement été mis à jour.
Pour ceux qui utilisent query-string, vous devrez peut-être faire quelque chose comme:
var nameYouWant = queryString.parse(this.props.location.search).nameYouWant;
C'est arrivé dans mon cas, et this.props.location.search.theUrlYouWant
refuserait de travailler. La deuxième option mentionnée par Tyler a également fonctionné pour moi avec quelques ajustements similaires.