J'utilise react et react-router pour mon application côté client. Je n'arrive pas à comprendre comment obtenir les paramètres de requête suivants à partir d'une URL comme:
http://xmen.database/search#/?status=APPROVED&page=1&limit=20
Mes itinéraires ressemblent à ceci (le chemin est totalement faux je sais):
var routes = (
<Route>
<DefaultRoute handler={SearchDisplay}/>
<Route name="search" path="?status=:status&page=:page&limit=:limit" handler={SearchDisplay}/>
<Route name="xmen" path="candidate/:accountId" handler={XmenDisplay}/>
</Route>
);
Mon itinéraire fonctionne bien, mais je ne sais pas comment formater le chemin pour obtenir les paramètres que je souhaite. J'apprécie toute aide à ce sujet!
javascript
reactjs
client-side
react-router
client-side-scripting
Christophe Robin
la source
la source
getCurrentQuery
willTransitionTo
crochets sur votre gestionnaire. Il reçoit des paramètres de chaîne de requête. github.com/rackt/react-router/commit/…Réponses:
Remarque: copier / coller à partir du commentaire. Assurez-vous d'aimer le message original!
Ecrire en es6 et utiliser react 0.14.6 / react-router 2.0.0-rc5. J'utilise cette commande pour rechercher les paramètres de requête dans mes composants:
Il crée un hachage de tous les paramètres de requête disponibles dans l'URL.
Mettre à jour:
Pour React-Router v4, consultez cette réponse . En gros, utilisez
this.props.location.search
pour obtenir la chaîne de requête et analyser avec lequery-string
package ou URLSearchParams :la source
query
semble avoir disparu dans React Router 4. github.com/ReactTraining/react-router/issues/…ANCIEN (avant v4):
Ecrire en es6 et utiliser react 0.14.6 / react-router 2.0.0-rc5. J'utilise cette commande pour rechercher les paramètres de requête dans mes composants:
Il crée un hachage de tous les paramètres de requête disponibles dans l'URL.
MISE À JOUR (React Router v4 +):
this.props.location.query dans React Router 4 a été supprimé (en utilisant actuellement la v4.1.1) plus d'informations sur le problème ici: https://github.com/ReactTraining/react-router/issues/4410
On dirait qu'ils veulent que vous utilisiez votre propre méthode pour analyser les paramètres de requête, en utilisant actuellement cette bibliothèque pour combler le vide: https://github.com/sindresorhus/query-string
la source
TypeError: Cannot read property 'location' of undefined
:: |Les réponses ci-dessus ne fonctionneront pas
react-router v4
. Voici ce que j'ai fait pour résoudre le problème -Première installation de la chaîne de requête qui sera requise pour l'analyse.
npm install -save query-string
Maintenant, dans le composant routé, vous pouvez accéder à la chaîne de requête non analysée comme celle-ci
this.props.location.search
Vous pouvez le vérifier en vous connectant à la console.
Enfin analyser pour accéder aux paramètres de la requête
Donc, si la requête est comme
?hello=world
console.log(parsed.hello)
va enregistrerworld
la source
const query = new URLSearchParams(props.location.search); console.log(query.get('hello'));
(besoin de polyfill pour les anciens navigateurs).mise à jour 2017.12.25
"react-router-dom": "^4.2.2"
URL comme
BrowserHistory
:http://localhost:3000/demo-7/detail/2?sort=name
HashHistory
:http://localhost:3000/demo-7/#/detail/2?sort=name
avec dépendance de chaîne de requête :
résultats:
2 {sort: "name"} home
"react-router": "^2.4.1"
URL comme
http://localhost:8080/react-router01/1?name=novaline&age=26
const queryParams = this.props.location.query;
queryParams est un objet contenant les paramètres de requête:
{name: novaline, age: 26}
la source
http://localhost:8090/#access_token=PGqsashgJdrZoU6hV8mWAzwlXkJZO8ImDcn&expires_in=7200&token_type=bearer
(c'est-à-dire non/
après#
) Alors pour react router v4, vous devriez utiliser à lalocation.hash
place delocation.search
J'espère que cela pourra aider :)
Bon codage!
la source
vous n'avez pas besoin d'ajouter de module supplémentaire juste dans votre composant qui a une adresse URL comme celle-ci:
http: // localhost: 3000 / # /? autorité '
vous pouvez essayer le code simple suivant:
la source
Après avoir lu les autres réponses (d'abord par @ duncan-finney puis par @Marrs), je me suis mis à trouver le journal des modifications qui explique la manière idiomatique react-router 2.x de résoudre ce problème. La documentation sur l'utilisation de l'emplacement (dont vous avez besoin pour les requêtes) dans les composants est en fait contredite par le code réel. Donc, si vous suivez leurs conseils, vous recevez de gros avertissements de colère comme celui-ci:
Il s'avère que vous ne pouvez pas avoir une propriété de contexte appelée location qui utilise le type d'emplacement. Mais vous pouvez utiliser une propriété de contexte appelée loc qui utilise le type d'emplacement. La solution est donc une petite modification sur leur source comme suit:
Vous pouvez également transmettre uniquement les parties de l'objet de localisation que vous souhaitez à vos enfants pour obtenir le même avantage. Cela n'a pas changé l'avertissement pour changer le type d'objet. J'espère que cela pourra aider.
la source
Solution js simple:
Et vous pouvez l'appeler de n'importe où en utilisant:
J'espère que cela t'aides.
la source
Vous pouvez obtenir l'erreur suivante lors de la création d'une version de production optimisée lors de l'utilisation du module de chaîne de requête .
Pour surmonter cela, veuillez utiliser le module alternatif appelé stringquery qui effectue bien le même processus sans aucun problème lors de l'exécution de la construction.
la source