Hello I´m using react router and I need to pass some querystring parameters
tried with
<Route path="/result/:type?/?filter=:filter?" exact strict component={Result}/>
I was expecting that to catch urls like
/result
/result/animals
/result/cars
/result/animals?filter=cats,dogs
/result/cars?filter=sedan,truck
what´s the right way to do it?
For url parameters, like /animals
and /cars
, you can use the colon syntax /:type
But for query parameters, like ?filter=something
, you need to parse the query string.
According to react-router docs:
React Router does not have any opinions about how your parse URL query strings. Some applications use simple key=value query strings, but others embed arrays and objects in the query string. So it's up to you to parse the search string yourself.
In modern browsers that support the URL API , you can instantiate a
URLSearchParams
object fromlocation.search
and use that.In browsers that do not support the URL API (read: IE) you can use a 3rd party library such as query-string.
For example, in your component you will have location
as a prop from the parent Route
(or you can get it from withRouter
), you can then use location.search
to parse the query string like this:
function Parent({location}) {
let params = new URLSearchParams(location.search);
return <Child name={params.get("filter")} />;
}
For more info:
React Router Docs - Query Parameters
Example CodeSandbox
Older versions of React Router offered this functionality but ultimately they decided it was too cumbersome to handle the variation across browsers.
As of the current version (v4), you need to use a library, such as query-string.
One more option to consider: if you know your target browsers support the URLSearchParams API, you can use that instead.
yarn add query-string
import queryString from 'query-string'
...
componentDidMount() {
const values = queryString.parse(this.props.location.search)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With