Ответ 1
Это закончило работу:
const mapStateToProps = (state, ownProps) => {
const skill_id = ownProps.match.params.skill_id;
....
У меня есть следующий URL: http://localhost:4400/skills/3
В моем реагирующем компоненте у меня есть:
constructor(props) {
super(props);
this.state = { skill_id: props.match.params.skill_id };
}
....
const mapStateToProps = (state, ownProps) => {
return {
skill_id: state.skill_id,
ratingsBySkillId: state.rating.by_skill_id.find(el => el.skill_id === skill_id)
};
};
Проблема в том, что state.skill_id
недоступен в mapStateToProps? Почему? Как я могу использовать params в mapStateToProps?
Это закончило работу:
const mapStateToProps = (state, ownProps) => {
const skill_id = ownProps.match.params.skill_id;
....
поэтому то, что вы хотели бы сделать, - map skill_id в mapStateToProps на значение, которое хранится в состоянии от реагирующего маршрутизатора. Тогда вы просто принесете skill_id
Также я бы порекомендовал некоторую логику, чтобы проверить, не определено ли skill_id, поскольку этот ключ генерируется только в объекте, если у пользователя есть значение для skill_id
constructor(props) {
super(props);
this.state = { skill_id: props.skill_id };
}
....
const mapStateToProps = (state, ownProps) => {
return {
skill_id: (('skill_id' in state.routing.locationBeforeTransitions.query) ? state.routing.locationBeforeTransitions.query.skill_id: false),
ratingsBySkillId: state.rating.by_skill_id.find(el => el.skill_id === skill_id)
};
};
Надеюсь, это поможет, но ваша ценность должна быть в объекте маршрутизации состояния
Если вы используете реагирующий маршрутизатор, просто используйте this.props.params.id.
это зависит от того, как вы определили маршрутизатор. если ваш маршрутизатор
<route path = '/skills/:id' component = {yourComponent} />
то это работает. но если ваш маршрутизатор
<route path = '/skills/:number' component = {yourComponent} />
то вы должны сделать это. this.props.params.number