2016-04-19 3 views
1

я определил некоторые маршруты:Реагировать маршрутизатор - получить маршрут пропеллер вне связанного компонента

render((
    <Router history={hashHistory}> 
     <Route path="/" component={App}> 
      <IndexRoute component={IndexContainer} /> 
      <Route path="/agence" headerWhite={true} component={AgencyContainer} /> 
     </Route> 
    </Router> 
), document.getElementById('app')); 

Как вы можете видеть, у меня есть опора headerWhite={true} на /agence маршруте. Я могу получить доступ к нему в моем AgencyContainer компоненте через this.props.route.headerWhite. Но я хочу иметь доступ к нему в моем компоненте App. Есть ли простой способ сделать это?

Что я хочу достичь, так это передать headerWhite ссылку на мой Header компонент, который отображается в моем App компоненте, потому что он должен быть на каждой странице веб-сайта.

спасибо.

+0

Читайте о контекстах в разделе «Реагировать здесь» - https://facebook.github.io/react/docs/context.html. Это должно помочь –

+0

Спасибо, я просто прочитал. С этим я могу получить экземпляр Router, но похоже, что в [RouterContext API] нет (https://github.com/reactjs/react-router/blob/master/docs/API.md#contextrouter) что позволяет мне получить текущий маршрут, чтобы получить его реквизит. Я что-то пропустил ? – Cyrille

ответ

0

Я решил эту проблему, выполнив следующие действия:

import React from 'react'; 
import Page from './Page'; 
import Header from './Header'; 

function getCurrentRoute(router, routes) { 
    const currentRoute = routes.filter(route => route.path && router.isActive(route.path, true)); 

    return currentRoute[0]; 
} 

function App(props, context) { 
    const currentRoute = getCurrentRoute(context.router, props.routes); 

    return (
     <Page> 
      <Header headerWhite={currentRoute.headerWhite} /> 
      {props.children} 
     </Page> 
    ) 
} 

App.contextTypes = { 
    router: React.PropTypes.object.isRequired 
}; 

export default App; 

Тем не менее, он решает мою проблему, но я не знаю, что есть лучший способ сделать это. Поэтому, если у кого-то есть лучшее решение, пожалуйста, дайте это, и я приму ваш ответ!

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