I do realize this might be a bad practice, but I need to redirect a user according to their email in exactly this manner:
/chat?user={emailAddress}
What should the exact path look like so that I could access emailAddress as a prop in chatRenderer ? URL must have name query in it.
<Route
exact
path={`/chat?user=???`}
render={this.chatRenderer}
/>
CodePudding user response:
App.js
<Route
exact
path="/chat"
component={UserChatPage}
/>
Home page
import { useHistory } from 'react-router-dom';
function MyHomePage (){
const history = useHistory()
const redirect = ()=> history.push(`/chat?user=${email}`);
User chat page
var url_string = window.location.href
var url = new URL(url_string);
var user = url.searchParams.get("user");
CodePudding user response:
react-router-dom concerns itself only with matching the path part of the URL.
Change the Route to match the URL sans the queryString:
<Route
path="/chat"
render={this.chatRenderer}
/>
In the routed component access the queryString search from the location object. location is available on props if rendered by render or component prop of Route, or can be accessed by the useLocation hook.
const { search } = location;
...
const searchParams = new URLSearchParams(search);
const userEmail = searchParams.get('user');
// apply logic against userEmail value
