2015-12-27 54 views
1

我正在使用Relay和react-router-relay,並試圖組合多個Relay容器。內部容器需要一個查詢片段變量,必須通過其父容器從路由器向下傳遞。它沒有得到這個變量。我如何撰寫含變量的查詢片段

下面的代碼的外觀:

// A "viewer": 

const UserQueries = { user:() => Relay.QL`query { user }` }; 

// A route to compose a message: 

<Route                                             
    path='/compose/:id'                                           
    component={ ComposeContainer }                                        
    queries={ UserQueries }                                        
/> 

// A container: 

const ComposeContainer = Relay.createContainer(
    Compose, 
    { 
    initialVariables: { 
     id: null 
    },                                                                                                 
    fragments: {                                               
     user:() => Relay.QL`                                           
     fragment on User {                                           
      ${ BodyContainer.getFragment('user') }                                       
      // other fragments                                    
     }                                                
     `                                                
    } 
    } 
); 

// And the composed container: 

const BodyContainer = React.createContainer(
    Body, 
    { 
    initialVariables: { 
     id: null 
    },                                                                                                 
    fragments: {                                               
     user:() => Relay.QL`                                           
     fragment on User {                                           
      draft(id: $id) { 
      // fields 
      }                                      
     }                                                
     `                                                
    } 
    } 
); 

BodyContainer場草案從來沒有得到$id從路由PARAM。 RelayContainer.getFragment()的簽名似乎可以讓你傳遞params和變量,但我不確定應該如何使用它。

回答

5

user<ComposeContainer>片段必須是這樣的:

user: ({ id }) => Relay.QL` 
    fragment on User { 
    ${BodyContainer.getFragment('user', { id })} 
    // other fragments 
    } 
` 

此外,當您在<BodyContainer><ComposeContainer>組成。您還需要通過id作爲道具,例如

<BodyContainer id={this.props.id} /> 

另請參見https://github.com/facebook/relay/issues/309的其他討論。

+0

謝謝!真的很感激它 –