Внутри mapStateToProps, как получить параметр response-router?

У меня есть следующий 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?

Ответ 1

Это закончило работу:

const mapStateToProps = (state, ownProps) => {
  const skill_id = ownProps.match.params.skill_id;
....

Ответ 2

поэтому то, что вы хотели бы сделать, - 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)
  };
};

Надеюсь, это поможет, но ваша ценность должна быть в объекте маршрутизации состояния

Ответ 3

Если вы используете реагирующий маршрутизатор, просто используйте this.props.params.id.

это зависит от того, как вы определили маршрутизатор. если ваш маршрутизатор

<route path = '/skills/:id' component = {yourComponent} />

то это работает. но если ваш маршрутизатор

<route path = '/skills/:number' component = {yourComponent} />

то вы должны сделать это. this.props.params.number