React router 4 не обновляет просмотр по ссылке, но делает обновление

Я использую следующий простой навигационный код

<Router>
  <Switch>
    <Route exact path='/dashboard' component={Dashboard} />
    <Route path='/dashboard/accounts' component={AccountPage} />
  </Switch>
</Router>

<NavLink exact to={'/dashboard'}
         disabled={this.props.item.disabled}
         activeClassName='active'>

<NavLink exact to={'/dashboard/accounts'}
         disabled={this.props.item.disabled}
         activeClassName='active'>

URL изменяется, но нет. Тем не менее, он меняет, когда я обновляю страницу или вручную перехожу к этому URL-адресу.

Ответ 1

Это связано с тем, что метод react-redux connect реализует shouldComponentUpdate, что приведет к рендерингу компонента не, если реквизит не изменился. И теперь это конфликтует с реакционным маршрутизатором 4.

Чтобы избежать этого, вы можете передать {pure: false} в connect, как описано в разделе раздел устранения неисправностей реакции-сокращения.

Другой способ - использовать withRouter HOC или передать location prop как описанный в DOCS.

Ответ 2

Вы также можете использовать:

import { withRouter } from 'react-router-dom';

И затем по умолчанию для экспорта вы сделаете следующее:

export default withRouter(connect(mapStateToProps, {})(Layout));

Потому что, когда у вас есть экспортное соединение, вам нужно сказать, что этот компонент будет использовать маршрутизатор.