I've a little problem with reach router, using react hooks. I need capture the params of the route in the browser
I tried with props of the native documentation in the web of reach router but that is not giving me the param, the route is this:
http://localhost:8080/home?init=true
How to capture that variable "init"?
Getting the URL params In React router v4, you can access it using the props.match.params.id . In class-based components, you can access it like this. import React, { Component } from "react"; class Users extends Component { render() { const { id } = this.
Get a single Query String value location.search object: import React from 'react'; import { useSearchParams } from 'react-router-dom'; const Users = () => { const [searchParams] = useSearchParams(); console. log(searchParams); // ▶ URLSearchParams {} return <div>Users</div>; };
Reach Router has a useLocation hook you can use:
import { useLocation } from "@reach/router"
// then
const location = useLocation()
In location.search
is the search field, containing all the query parameters (query strings) from your URL. In your example, /home?init=true
would return location.search: "?init=true"
, which is a query string.
You can use query-string library (yarn add query-string
) to parse this:
import { parse } from "query-string"
// then
const searchParams = parse(location.search)
which would give you object
{init: "true"}
you could also parse booleans with queryString.parse('foo=true', {parseBooleans: true})
So the full example would be
import { useLocation } from "@reach/router"
import { parse } from "query-string"
// and
const location = useLocation()
const searchParams = parse(location.search) // => {init: "true"}
In no time, most of us will be redoing this everytime, so it's best to create a custom hook just to do this.
// A custom hook that builds on useLocation to parse
// the query string for you.
export const useQuery = queryParam => {
const search = new URLSearchParams(useLocation().search);
return search.get(queryParam);
};
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