GraphQL / Relay - 是不是需要在主 QueryRenderer 中查询所有表?

Posted

技术标签:

【中文标题】GraphQL / Relay - 是不是需要在主 QueryRenderer 中查询所有表?【英文标题】:GraphQL / Relay - do all tables need to be queried in main QueryRenderer?GraphQL / Relay - 是否需要在主 QueryRenderer 中查询所有表? 【发布时间】:2021-04-28 06:42:47 【问题描述】:

我是 GraphQL 和 Relay 的新手,我正在为查询、片段、...传播和传递道具而苦苦挣扎。我认为我不必要地通过许多组件传递道具。我想学习如何将我的数据对象从 QueryRenderer 传送到深度嵌套的组件,跳过所有的祖先组件。

假设我有一个这样的组件结构。我需要来自应用程序深处的EmojisList 组件内的“表情符号”表中的表情符号列表。我不确定在哪里传播或传递道具,或者何时询问实际的标量。

<MainApp>
  <QueryRenderer 
    environment=environment
    query=graphql`
        query MainAppQuery 
        currentPerson  // current user
            ...Timeline_currentPerson
        
        allEmojis 
            ...ReactionBar_emojisList
          
        
    `
  />
  <Timeline currentPerson=props.currentPerson>
    <PostList>
      <Post>
        <ReactionBar>
          <EmojisList>
            // I need this list
            export default createFragmentContainer(ReactionBar, 
              emojisList: graphql`
                fragment ReactionBar_emojisList on EmojisConnection @relay(plural: true) 
                  edges 
                    node 
                      name
                      rowId
                    
                  
                
              `,
            );      
          </EmojisList>
        </ReactionBar>
      </Post>
    </PostList>
  </Timeline>
</MainApp>

【问题讨论】:

【参考方案1】:

您可以使用Fragment Container

使用createFragmentContainer HOC 包装&lt;EmojiList /&gt; 组件,然后它将获取您从QueryRenderer 获取的所有您需要的数据。

数据将作为组件内的道具访问

// EmojisList.js
import createFragmentContainer, graphql from 'react-relay';

class EmojisList extends React.Component /* code */

// Export a *new* React component that wraps the original `<EmojisList>`.
export default createFragmentContainer(EmojisList, 
  emojisList: graphql`
    fragment EmojisList_emojisList on EmojisConnection 
      edges 
        node 
         name
         rowId
        
      
    
  `,
);

【讨论】:

谢谢。是的,我实际上将它包装在 createFragmentContainer 中,但忘记添加它。 (添加到 OP)。我不断收到此错误:createFragmentSpecResolver: Expected prop emojisList` to be provided to Relay(ReactionBar), but got undefined.` 获取所有表情符号的 GraphiQL 查询是 allEmojis edges node scalars

以上是关于GraphQL / Relay - 是不是需要在主 QueryRenderer 中查询所有表?的主要内容,如果未能解决你的问题,请参考以下文章

如何协调 Relay/GraphQL 的 globalId 与 mobgodb 的 _id?

如何将 Realm 与 Relay/GraphQL 一起使用

在 GraphQL/Relay 中处理隐私

如何进行示例 GraphQL Relay 突变

使用 Firebase 实时数据库,我还需要使用flux、redux、mobx 或relay 和graphql

Graphql + Relay graphql-relay-js 依赖