React JS. Как получить параметр из вложенного роута?

Есть react-router (react-router 2.*):

<Router  history={hashHistory}>
    <Route path="/" component={App}>
        <Route path="list/:id" component={List} />
        <Route path="another/:id" component={Another} />
    </Route>
</Router>

Как получить в компоненте {App} свойство :id вложенного роута {List}?
И как я могу различить компоненты {List} и {Another} в {App}?

В компоненте {App} рендер происходит след. образом:
<div className="wrapper">
    <MenuList />
    {this.props.children}
</div>

Смысл заключается в следующем:

Мне необходимо произвести какие-то действия с id в MenuList, например, установить активное состояние пункта.

Как это сделать наиболее правильно и в стиле React'а?

Спасибо!
  • Вопрос задан
  • 645 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Roman_Kh
Добавьте в компонент List функцию getId(), которая будет возвращать this.props.params.id
А в App можно добавить функцию, которая будет возвращать все id всех children'ов.
Ссылку на функцию можно передать в качестве параметра при создании компонента MenuList
<MenuList getId={this.getAllIds} />
А MenuList будет вызывать ее при отрисовке и разбирать, какие пункты сделать активными, а какие нет.

Как вариант, можно сделать store (см. Flux), который будет содержать данные об отображенных компонентах. И тогда все (App, MenuList, List) будут общаться только с этим store.
Ответ написан
@vilix
если я правильно понял часть вашего вопроса, в App получить :id дочерних компонентов можно так:
if (this.props.children)
      console.log(this.props.children.props.params.id);


т.е например вы перешли по ссылке /list/11 тогда код выше выведет "11"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект