Я использую response-router-redux (https: / /github.com/ReactTraining/react-router/tree/master/packages/react-router-redux )

Установлен с

npm install --save react-router-redux@next

Реализовано так:

<Route path='/resource/:id' component={Resource}/>

Я пытаюсь получить доступ к параметру для идентификатора в контейнере, например так:

const mapStateToProps = (state, ownProps) => {
  console.log(ownProps)
  return {...state.resource, id: ownProps.params.id}
}

Как показано в документах о реакции-маршрутизаторе-редуксе.

Я получаю сообщение о том, что ownProps.params не определено. Так что это работает:

const mapStateToProps = (state, ownProps) => {
  return {...state.resource, id: ownProps.match.params.id}
}

Однако, когда я регистрирую ownProps, я обнаруживаю, что ownProps.match.params.id содержит идентификатор, который мне требуется.

Это изменение в реализации или я неправильно реализовал маршрут? Спасибо

7
zoopz 24 Апр 2017 в 03:00

2 ответа

Лучший ответ

npm install --save react-router-redux@next

С помощью приведенной выше команды вы, вероятно, установили альфа-версию react-router-redux 5 и используете ее с реакции-маршрутизатором v4.

Как они упоминают в https://github.com/reactjs/react-router-redux readme, react-router-redux версия 5 в настоящее время активно разрабатывается в где-то еще.

Этот репозиторий предназначен для response-router-redux 4.x, который совместим только с response-router 2.x и 3.x

Следующая версия response-router-redux будет 5.0.0 и будет совместим с реакции-роутером 4.х. В настоящее время активно разработал там.

Таким образом, документация, на которую вы ссылаетесь, недействительна для используемой версии.

В вашей реализации нет ничего плохого, и вы можете продолжать получать доступ к params через match собственногоProps.

6
Tharaka Wijebandara 24 Апр 2017 в 06:02

Я знаю, что это уже закрытый вопрос, но я думаю, что это была бы полезная информация для кого-то еще

Я использую ту же версию, и вот мое решение для получения параметров, когда у вас нет доступа к match:

import { createMatchSelector } from 'react-router-redux';

const { params } = createMatchSelector({ path: '/resource/:id' })(state);

console.log(params.id); 

Я использую его в redux-saga, а не в компоненте. А для вашей ситуации было бы лучше использовать react-router реквизиты и получать параметры от props.match.params.id

16
Kate Lizogubova 22 Мар 2018 в 13:19