• Как заставить React Router обновлять контент при переходе по аналогичным страницам с одним и тем же Handler с динамическим path?

    Какая версия реакта, роутера?

    Попробуйте использовать метод 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.

    Значит мы лишний раз не будем рендерить наш компонент. Успех)
    Ответ написан
    3 комментария