javascript - 如何使用变量组合查询片段

标签 javascript relayjs

我正在使用 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 中的 draft 字段永远不会从路由参数中获取 $id。签名RelayContainer.getFragment()有参数似乎可以让你传递参数和变量,但我不确定应该如何使用它。

最佳答案

你的 user片段 <ComposeContainer>必须是这样的:

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

此外,当您在 <BodyContainer> 中撰写时来自 <ComposeContainer> .您还需要传入 id作为 Prop ,例如

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

另请参阅 https://github.com/facebook/relay/issues/309 中的其他讨论.

关于javascript - 如何使用变量组合查询片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34481732/

相关文章:

javascript - 如何将 Relay Modern(babel-plugin-relay 和 Relay-compiler)与 TypeScript 结合使用?

relayjs - 如何将数据持久化(转储)到本地存储并在以后的 session 中加载?

java - 使用 HtmlUnit 执行 javascript 时出错

javascript - 使用javascript和正则表达式在html中查找div

javascript - 将全局变量传递给函数

android - React-native + Relay.js 的稳定构建

javascript - 从 Relay.js 存储中获取 React 组件之外的数据

graphql - 如何订阅relay/graphql突变的进度事件

javascript - javascript中的函数调用总是一个方法吗

javascript - 了解 $resource 工厂和 @ 前缀