switch route react query link example doom javascript reactjs client-side react-router client-side-scripting

javascript - link - react router query params



Obtención de parámetros de consulta del fragmento hash react-router (9)

Con el paquete stringquery:

import qs from "stringquery"; const obj = qs("?status=APPROVED&page=1limit=20"); // > { limit: "10", page:"1", status:"APPROVED" }

Con el paquete de cadena de consulta:

import qs from "query-string"; const obj = qs.parse(this.props.location.search); console.log(obj.param); // { limit: "10", page:"1", status:"APPROVED" }

Sin paquete:

const convertToObject = (url) => { const arr = url.slice(1).split(/&|=/); // remove the "?", "&" and "=" let params = {}; for(let i = 0; i < arr.length; i += 2){ const key = arr[i], value = arr[i + 1]; params[key] = value ; // build the object = { limit: "10", page:"1", status:"APPROVED" } } return params; }; const uri = this.props.location.search; // "?status=APPROVED&page=1&limit=20" const obj = convertToObject(uri); console.log(obj); // { limit: "10", page:"1", status:"APPROVED" } // obj.status // obj.page // obj.limit

Espero que ayude :)

¡Feliz codificación!

Estoy usando react y react-router para mi aplicación en el lado del cliente. Parece que no puedo entender cómo obtener los siguientes parámetros de consulta de una URL como:

http://xmen.database/search#/?status=APPROVED&page=1&limit=20

Mis rutas se ven así (la ruta es totalmente incorrecta, lo sé):

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> );

Mi ruta funciona bien, pero no estoy seguro de cómo formatear la ruta para obtener los parámetros que quiero. Agradezco cualquier ayuda en esto!


ANTIGUO (pre v4):

Escribir en es6 y usar react 0.14.6 / react-router 2.0.0-rc5. Uso este comando para buscar los parámetros de consulta en mis componentes:

this.props.location.query

Crea un hash de todos los parámetros de consulta disponibles en la url.

ACTUALIZACIÓN (React Router v4 +):

this.props.location.query en React Router 4 se ha eliminado (actualmente usando v4.1.1) más sobre el problema aquí: https://github.com/ReactTraining/react-router/issues/4410

Parece que quieren que use su propio método para analizar los parámetros de consulta, actualmente usando esta biblioteca para llenar el vacío: https://github.com/sindresorhus/query-string


Después de leer las otras respuestas (Primero por @ duncan-finney y luego por @Marrs), me propuse encontrar el registro de cambios que explicara la forma idiomática de reaccionar-enrutador 2.x de resolver esto. El código real contradice la documentación sobre el uso de la ubicación (que necesita para consultas) en los componentes. Entonces, si sigues sus consejos, obtienes grandes advertencias enojadas como esta:

Warning: [react-router] `context.location` is deprecated, please use a route component''s `props.location` instead.

Resulta que no puede tener una propiedad de contexto llamada ubicación que use el tipo de ubicación. Pero puede usar una propiedad de contexto llamada loc que usa el tipo de ubicación. Entonces, la solución es una pequeña modificación en su fuente de la siguiente manera:

const RouteComponent = React.createClass({ childContextTypes: { loc: PropTypes.location }, getChildContext() { return { location: this.props.location } } }); const ChildComponent = React.createClass({ contextTypes: { loc: PropTypes.location }, render() { console.log(this.context.loc); return(<div>this.context.loc.query</div>); } });

También puede transmitir solo las partes del objeto de ubicación que desea en sus hijos para obtener el mismo beneficio. No cambió la advertencia para cambiar al tipo de objeto. Espero que ayude.


Las respuestas anteriores no funcionarán en react-router v4 . Esto es lo que hice para resolver el problema:

Primero instale query-string que será necesaria para el análisis.

npm install -save query-string

Ahora en el componente enrutado puede acceder a la cadena de consulta no analizada como esta

this.props.location.search

Puede verificarlo iniciando sesión en la consola.

Finalmente analizar para acceder a los parámetros de consulta

const queryString = require(''query-string''); var parsed = queryString.parse(this.props.location.search); console.log(parsed.param); // replace param with your own

Entonces, si la consulta es como ?hello=world

console.log(parsed.hello) registrará el world


Nota: Copiar / Pegar del comentario. ¡Asegúrate de que te guste la publicación original!

Escribir en es6 y usar react 0.14.6 / react-router 2.0.0-rc5. Uso este comando para buscar los parámetros de consulta en mis componentes:

this.props.location.query

Crea un hash de todos los parámetros de consulta disponibles en la url.

Actualizar:

Para React-Router v4, vea esta respuesta . Básicamente, use this.props.location.search para obtener la cadena de consulta y analizar con el paquete de query-string o URLSearchParams :

const params = new URLSearchParams(paramsString); const tags = params.get(''tags'');


Puede obtener el siguiente error al crear una compilación de producción optimizada al usar el módulo de query-string .

Error al minificar el código de este archivo: ./node_modules/query-string/index.js:8

Para superar esto, utilice el módulo alternativo llamado stringquery que realiza el mismo proceso sin problemas mientras ejecuta la compilación.

import querySearch from "stringquery"; var query = querySearch(this.props.location.search);


Solución js simple:

queryStringParse = function(string) { let parsed = {} if(string != '''') { string = string.substring(string.indexOf(''?'')+1) let p1 = string.split(''&'') p1.map(function(value) { let params = value.split(''='') parsed[params[0]] = params[1] }); } return parsed }

Y puede llamarlo desde cualquier lugar usando:

var params = this.queryStringParse(this.props.location.search);

Espero que esto ayude.


actualizar 2017.12.25

"react-router-dom": "^4.2.2"

url como

BrowserHistory : http://localhost:3000/demo-7/detail/2?sort=name

HashHistory : http://localhost:3000/demo-7/#/detail/2?sort=name

con dependencia de https://github.com/sindresorhus/query-string :

this.id = props.match.params.id; this.searchObj = queryString.parse(props.location.search); this.from = props.location.state.from; console.log(this.id, this.searchObj, this.from);

resultados:

2 {sort: "name"} home

"react-router": "^2.4.1"

Url como http://localhost:8080/react-router01/1?name=novaline&age=26

const queryParams = this.props.location.query;

queryParams es un objeto que contiene los parámetros de consulta: {name: novaline, age: 26}


import querySearch from "stringquery"; var query = querySearch(this.props.location.search);

no necesita agregar ningún módulo adicional solo en su componente que tenga una dirección URL como esta:

http: // localhost: 3000 / # /? autoridad ''

puedes probar el siguiente código simple:

const search =this.props.location.search; const params = new URLSearchParams(search); const authority = params.get(''authority''); //