react-router-dom switch & match
Renders the first child <Route> or <Redirect> that matches the location.
If the URL is /about, then <About>, <User>, and <NoMatch> will all render because they all match the path. This is by design, allowing us to compose <Route>s into our apps in many ways, like sidebars and breadcrumbs, bootstrap tabs, etc.
import { Route } from "react-router";
let routes = (
<div>
<Route path="/about">
<About />
</Route>
<Route path="/:user">
<User />
</Route>
<Route>
<NoMatch />
</Route>
</div>
);
Occasionally, however, we want to pick only one <Route> to render. If we’re at /about we don’t want to also match /:user (or show our “404” page). Here’s how to do it with Switch:
import { Route, Switch } from "react-router";
let routes = (
<Switch>
<Route exact path="/">
<Home />
</Route>
<Route path="/about">
<About />
</Route>
<Route path="/:user">
<User />
</Route>
<Route>
<NoMatch />
</Route>
</Switch>
);
Now, if we’re at /about, <Switch> will start looking for a matching <Route>. <Route path="/about"/> will match and <Switch> will stop looking for matches and render <About>. Similarly, if we’re at /michael then <User> will render.
We can manually set the variable parameters like this:
<Route path="/scan/detail/:trx/:tokenAddress" component={ScanDetail} />
And then we can get this parameter in the subcomponent:
let { tokenAddress } = this.props.match.params;
A match object contains information about how a <Route path> matched the URL. match objects contain the following properties:
params- (object) Key/value pairs parsed from the URL corresponding to the dynamic segments of the pathisExact- (boolean)trueif the entire URL was matched (no trailing characters)path- (string) The path pattern used to match. Useful for building nested<Route>surl- (string) The matched portion of the URL. Useful for building nested<Link>s
You’ll have access to match objects in various places:
- Route component as
this.props.match - Route render as
({ match }) => () - Route children as
({ match }) => () - withRouter as
this.props.match - matchPath as the return value
- useRouteMatch as the return value
If a Route does not have a path, and therefore always matches, you’ll get the closest parent match. Same goes for withRouter.

浙公网安备 33010602011771号