0

我是 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>

控制台错误

4

1 回答 1

0

您可以使用片段容器

使用 HOC包装<EmojiList />组件,createFragmentContainer然后它将获取您在根目录中获取的所有需要​​的数据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
        }
      }
    }
  `,
});
于 2021-01-24T08:11:39.070 回答