2016-01-02 4 views
4

У меня есть 2 маршрута с использованием одного и того же компонента (формы), один для создания новой записи, а другой для редактирования. Имя штата has been removed от React Router, я не могу просто проверить, является ли this.route.name === 'edit' => fetch (itemAPI).Название состояния маршрута в React + Redux

Один из вариантов - написать редуктор/действие для создания состояния «edit» в моем магазине redux, но мне было интересно, если это лучшая практика, и если есть более простой способ проверить, где я нахожусь в приложении (какой маршрут).

Мои маршруты:

<Route component={ItemNew} path='/items/edit/:id' /> 
<Route component={ItemNew} path='/items/new' /> 

В моей ItemNew компоненте, я хотел бы:

componentDidMount() { 
    let stateName = this.props.location.state 
    if(stateName === 'edit') { 
     this.props.fetchItem() // dispatch API action 
    } 
} 

ответ

2

Route компонент, используемый для выполнения заключительной части матча на текущем URL показывает вверх на this.props.route; весь список вложенных Route s, участвующих в матче, находится в массиве this.props.routes. Вы можете передать любые произвольные реквизиты на эти Route s и получить их позже. Например:

<Route component={ItemNew} name="edit" path='/items/edit/:id' /> 
<Route component={ItemNew} name="add" path='/items/new' /> 

и

componentDidMount() { 
    if(this.props.route.name === 'edit') { 
    this.props.fetchItem() //dispatch API action 
    } 
} 
+0

есть способ получить доступ к route.name в Redux состоянии? thx – alexndm

+0

@alexndm Не по умолчанию. Либо вставьте его в состояние, используя крючок (например, 'onEnter' или' componentDidMount'), или посмотрите на что-то вроде [redux-simple-router] (https://github.com/rackt/redux-simple-router) или [перевождь-маршрутизатор] (https://github.com/acdlite/redux-router) –

Смежные вопросы