如何根据连接类型字段中的值过滤中继结果?

时间:2017-01-08 02:30:22

标签: reactjs graphql relayjs

这个问题更多地是关于我遇到的模式而不是问题的特定实例。

通常我会有一个Relay容器来执行这样的查询:

getUserGroup(id: $id) {
    users {
      edges {
        node {
          widgets {
            edges {
              node {
                id
                widgetTags {
                  edges {
                    node {
                      tagName
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

换句话说:我想在WidgetList组件中呈现数据,如下所示:

// WidgetList.js
User1:
  Widget1: 
    TagA
    TagB
   Widget2: 
    TagA
    TagC
User 2: 
   // ..etc etc

我的目标是根据Widget

过滤WidgetTags结果

我的问题是,为了过滤,我想我需要父级别的所有WidgetTag信息。因为并非每个Widget都有Tags,所以我必须从User方输入查询。

如何使用Relay处理这样的模式?

到目前为止我尝试的选项是:

  1. 使用像state这样的Mobx管理应用集中整理我想要过滤的所有数据。每个Widget将自己的数据添加到store上的render和每个update,然后store用于过滤Widgets的数组在WidgetList render()函数中。

  2. 我手动从query级别的WidgetList结果中提取相关数据,然后执行与步骤1中相同的过滤步骤。

  3. 但这些都不符合Relay最佳做法,所以我想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:0)

您可以向widgets字段添加参数。 例如,你可以添加一个参数" withTags"将标记数组作为输入并仅返回具有这些标记的小部件: widgets(withTags: ['Sports', 'Art'])

听起来怎么样?