In my app.js
, I have a list of Routes:-
<Switch>
<Route path='/:locale'>
<Header />
<Container />
<Footer />
</Route>
<Route path='/notfound' component={NotFound} />
<Redirect to='/notfound' />
</Switch>
I have a URL like www.mydomainname.com/us.
I want the first route to render the components only when the :locale
matches us
or uk
. If the :locale
is empty or something not equal to us
or uk
(like au
), then the page should route to /notfound
.
The problem I am currently facing is, if I enter www.mydomainname.com/notfound
or any random stuff after www.mydomainname.com/
, then the first route is executing. I know I can get the :locale
using useParams()
, but how do I check it against an array of allowed values and reroute to the /notfound
page if the check fails?
CodePudding user response:
The route "/:locale" is a catch all route, so it will match any "/randomstring". Introduce a component Body
which is a locale specific renderer.
<Switch>
<Route path='/notfound' component={NotFound} />
<Route path='/:locale'>
<Body>
<Header />
<Container />
<Footer />
<Body>
</Route>
</Switch>
And Body component will be handling redirect
const Body = (props) => {
const { locale } = useParams()
if (["us", "uk"].indexOf(locale) != -1)
return(props.children)
else
return(
<Redirect to="/notfound" />
)
}