Skip to main content

Path parameters

Non-exact paths can be matched using path parameters.

const User = () => {
const { params } = useRouteMatch();
return <div>UserID: {params.id}</div>;
};

const App = () => {
return (
<Route path={'/user/:id'}>
<User />
</Route>
);
};

Parameter names can only contain letters, numbers, and underscores (_). If two parameters with the same name are present, only the value for the last one will be captured.

Path parameters are never optional, and will (non-greedy) match everything up to the next forward slash (/).

Because parameters are non-greedy, they can be separated by any character other than a number, letter, or underscore (eg. :foo-:bar). However, If there is no separator between parameters (eg. :foo:bar), every parameter except the last one will always be empty ("").

A path may also end with a wildcard (/*). Wildcards are only allowed at the end of a path, and must be preceded by a forward slash. The value matched by the wildcard is stored in params["*"]. An asterisk (*) anywhere else else in the path is matched literally.

const File = () => {
const { params } = useRouteMatch();
return <div>Filename: {params['*']}</div>;
};

const App = () => {
return (
<Route path={'/file/*'}>
<File />
</Route>
);
};