Какая версия реакта, роутера?
Попробуйте использовать метод componentWillReceiveProps - он должен вызываться, когда меняются параметры роута (в вашем случае - ID).
UPD1. Почему так происходит?
Когда компонент получает новые свойства (props) - он перерисовывается. Проблема может быть если Вы, например, используете параметры вашего роута через state:
class ControllerComponent extends Component {
super() {
super(props);
this.state = { itemId: this.getParams().id };
}
//...
render() {
return (
<div>
<p>Blah blah blah</p>
<SomeComponent itemId={this.state.itemId}/>
</div>
);
}
}
При этом: когда меняется меняется id компонент ControllerComponent перерисовывается, но state не изменился, поэтому в SomeComponent попадет старый id и может показаться, что ничего не поменялось.
class ControllerComponent extends Component {
super() {
super(props);
this.state = { itemId: this.getParams().id };
}
componentWillReceiveProps(nextProps) {
this.setState({ itemId: this.getParams().id });
}
//...
render() {
return (
<div>
<p>Blah blah blah</p>
<SomeComponent itemId={this.state.itemId}/>
</div>
);
}
}
Тогда все будет ок. Кстати, согласно докам
componentWillReceiveProps:
Calling this.setState() within this function will not trigger an additional render.
Значит мы лишний раз не будем рендерить наш компонент. Успех)