Я согласен с Остином в том, что вам не нужно использовать здесь государство. Ваши входы здесь не контролируются (вы не обрабатываете изменения состояния входов вашего родительского компонента).
Однако, если бы вы были, правильный способ сделать это - использовать componentWillReceiveProps
.
componentWillReceiveProps(nextProps) {
const id = nextProps.params.id - 1;
this.setState(() => ({post: nextProps.messages[id]});
}
Еще одна рекомендация. Вы можете просто передать 'post' из функции mapStateToProps, открыв ownProps и передав идентификатор. Пример:
const mapStateToProps = (state, ownProps) => {
return {
post: state.messages[ownProps.id - 1)
}
}
Основным преимуществом здесь является то, что вы не передаете весь массив сообщений каждому компоненту, что может ухудшить производительность, если у вас много этих компонентов на одной странице.