2016-11-01 51 views
0

我跟着FaceBook提供的react-relay-starter-kit創建了一個包含2條路徑的簡單應用程序。

但現在我想讓一個路由的組件調用另一個路由,同時將參數傳遞給此容器的片段。
換句話說,我有:

路由器配置:如何更改路由並將參數傳遞給中繼容器?

Relay.injectNetworkLayer(
    new Relay.DefaultNetworkLayer(config.gqlUrl, {options...}) 
); 

ReactDOM.render(
    <Router 
     history={hashHistory} 
     render={applyRouterMiddleware(useRelay)} 
     routes={routes} 
     environment={Relay.Store}> 

     <Route path="/" component={App}/> 
     <Route path="/route1" component={Comp1} /> 
     <Route path="/route2" component={Comp2} queries={comp2Query}/> 
    </Router>, 
    document.getElementById('root') 
); 


COMP1:

export default class Comp1 extends React.Component { 

    render() { 
     return ( 
     <div> 
      <span onClick={()=>{//go to comp2 with val=1}>1</span> 
      <span onClick={()=>{//go to comp2 with val=2}>2</span> 
      <span onClick={()=>{//go to comp2 with val=3}>3</span> 
     </div> 
     ); 
    } 
} 


組合物2:

class Comp2 extends React.Component { 

    render() { 
     return ( 
     <div> 
      {this.props.info.text} 
     </div> 
     ); 
    } 
} 

export default Relay.createContainer(Comp2, { 
    initialVariables: { 
     value: //the value set by the Comp1 
    }, 
    fragments: { 
     info: (variables) =>{    
      return Relay.QL` 
       fragment on News{ 
        text  
       } 
      `}} 
}); 

我找不出一種方法將值傳遞給第二個路由器。

回答

0

如果你做的一切都正確,你的Comp2應該在道具上有歷史記錄。 你可以使用它的另一種方式做到這一點你的路由

this.props.history.pushState('/home', { some: 'state' }) 

之間的導航是利用context.router。創建組合物2級後加

Comp2.contextTypes = { 
    router: React.PropTypes.object 
}; 

現在

this.context.router.push({ 
    pathname: '/home', 
    query: { some: 'query' }, 
    state: { some: 'state' } 
}); 

此處瞭解詳情:https://github.com/ReactTraining/react-router/blob/master/docs/API.md

+0

謝謝你的提示,它與此代碼爲我工作: 'hashHistory.push({ pathname:'/ home', query:{modal:true}, state:{maValue:true} });' 但在'Relay.createContainer'中,我無法訪問它,你知道一種方法來訪問傳遞給中繼容器的值嗎? – tahayk