Просто добавьте Redirect
в конце, который будет сопоставлен, когда ничего не происходит, и он будет перенаправлен на /en
import React, { Component } from 'react';
import { Route, Switch, Redirect } from "react-router-dom";
import { Home } from '../containers/home';
import { About } from '../containers/about';
import { Contact } from '../containers/contact';
export default class Routes extends Component {
render(){
return(
<Switch>
<Route path="/:lang/about" component={About} />
<Route path="/:lang/contact" component={Contact} />
<Route path="/:lang/" component={Home} />
<Redirect to="/en" />
</Switch>
);
}
}
Демо на https://codesandbox.io/s/18rm8k82lj
Обновленный ответ ( из-за комментария )
Проблема состоит в том, что /:lang/
будет соответствовать /about
, и язык будетбыть установленным на about
.
Решение состоит в том, чтобы использовать render
реквизит маршрута и решить, что вы хотите там делать
export default class Routes extends Component {
render() {
const supportedLanguages = ["en", "jp", "de", "es"];
return (
<Switch>
<Route path="/:lang/about" component={About} />
<Route path="/:lang/contact" component={Contact} />
<Route
path="/:lang/"
render={props =>
supportedLanguages.includes(props.match.params.lang) ? (
<Home {...props} />
) : (
<Redirect to={`/en/${props.match.params.lang}`} />
)
}
/>
</Switch>
);
}
}
Демо на https://codesandbox.io/s/k2n9997345