Чтобы загрузить правильное состояние в представление модели (книгу), вам необходимо иметь доступ к необходимым переменным. Два простых способа добиться этого - с помощью параметра URL ?recid=12
или с помощью параметров соответствия реагирующего маршрутизатора, которые вы здесь делаете. У вас есть доступ к :recid
по маршруту match.params.recid
.
React docs рекомендует извлекать данные в componentDidMount()
, но нет ничего плохого в том, чтобы извлекать новые данные в componentDidUpdate()
при обновлении вашего пути. Не забывайте следить за состоянием извлечения, чтобы не делать несколько вызовов API. Обветренная версия может выглядеть примерно так:
class BookModel extends Component {
constructor {...}
componentDidMount() {
const { dispatch, match } = this.props;
const { recid } = match.params;
dispatch(someFetchAction("book", recid));
}
componentDidUpdate(prevProps) {
const { dispatch, fetching, match } = this.props;
const oldBook = prevProps.match.params.recid;
const newBook = match.params.recid;
const didUpdate = oldBook !== newBook;
//fetch new record if not already fetching and record id has changed
!fetching && didUpdate && dispatch(someFetchAction("book", newBook));
}
render() {...}
}
export default connect((store, props) => ({
bookModels: store.bookModels,
fetching: store.fetching
}))(BookModel);
Если у вас возникли проблемы с обновлениями, которых не было, вы можете добавить withRouter , но я не думаю, что в этом случае это будет необходимо.