如何将变量数据传递给 createFragementContainer

Posted

技术标签:

【中文标题】如何将变量数据传递给 createFragementContainer【英文标题】:How to pass a variable data to createFragementContainer 【发布时间】:2018-04-06 13:45:15 【问题描述】:

我正在使用 Relay Modern 构建我的组件,我想将一个变量传递给片段,以便它可以用作我的查询中的 GraphQL 参数。

这是我正在使用的代码:

class Test extends Component 
    static propTypes = 
       userId: PropTypes.string.isRequired
    

    render = () => 

        return (

            <p>User Id: this.props.userId</p>
            <p>User name: this.props.viewer.name
        );
    


export default createFragmentContainer(
    Test,
    graphql`
        fragment Test_viewer on Viewer 
            user(id: $userId)  <<=== The $userId must be the this.props.userId passed
                id
                name
            
        
    `
);

当发出查询时,GraphQL 服务器返回错误提示 Variable \"$userId\" is not defined by operation \"UserQuery\"."

我在父组件中的查询:

const UserQuery = graphql` 

  query AdminQuery 
    viewer 
      ...Test_viewer
    
  
`

我怎样才能使上面的代码工作?

【问题讨论】:

【参考方案1】:

您需要在查询级别传递您的变量:

const UserQuery = graphql` 
  query AdminQuery($userId: ID!) 
    viewer 
      ...Test_viewer
    
  
`;

&lt;QueryRenderer /&gt; 元素上使用此查询时,您还将将变量作为 prop 传递:

<QueryRenderer
  query=UserQuery
  variables=
    userId: 'USER_ID',
  
  // ... others props
/>

【讨论】:

以上是关于如何将变量数据传递给 createFragementContainer的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量等数据传递给 iframe 页面中的框架

如何将数据传递给iframe中的变量

如何将一个组件中查询的数据传递给另一个组件以用作查询变量?

将数组数据传递给循环中的变量

将php变量/数组数据传递给角度js

微信小程序如何将接口获取的数据传递给自定义组件