React Router отображает один компонент для всех маршрутов (заголовок)
Есть вопрос относительно реакции роутера.
У меня есть элемент заголовка, который я хотел бы отобразить для всех маршрутов. И, конечно же, я хочу, чтобы это было частью того, чтобы пользователь мог щелкать элементы из навигационной панели.
В настоящее время у меня есть мой <Header />
за пределами моего <Router>
и я думаю, что это не работает, так как мой маршрутизатор не знает, чтобы сделать рендер?
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'
<div>
<Header />
<Router>
<Switch>
<Route exact path="/" component={Posts} />
<Route exact path="/:category/:postId" component={PostDetails} />
<Route path="/:category" component={CategoryView} />
</Switch>
</Router>
</div>
И мой заголовок имеет, например, <Link to="/">LOGO</Link>
2 ответа
Мой комментарий в ответе:
class App extends Component {
render() {
return (
<BrowserRouter>
<div>
<Header />
<Switch>
<Route exact path="/" component={Posts} />
<Route exact path="/:category/:postId" component={PostDetails} />
<Route path="/:category" component={CategoryView} /
</Switch>
<Footer />
</div>
</BrowserRouter>
);
}
}
Когда вы меняете местоположение, но совпадает тот же маршрут, ваш компонент не перемонтируется, а только получает новые реквизиты.
Поэтому вы можете использовать ловушку componentWillReceiveProps для обновления вашего компонента с использованием новых параметров маршрута (например, nextProps.match.params.category):
...
componentWillReceiveProps(nextProps) {
// Update component using nextProps
}
...