片段参数定义中对象数组的GraphQL Relay defaultValue

时间:2019-02-05 20:48:32

标签: graphql relay

我正在尝试用片段定义我的createRefetchContainer。但是,我收到有关对象类型数组的defaultValue的错误。我检查了文档,但无法弄清楚如何处理对象类型参数数组的默认值属性。

我尝试放置空数组“ [] ”或“ [{键:”状态“,值:”活动“}] ”,但它们都不起作用

export default createRefetchContainer(
  translate('admin')(UserList),
  graphql`
    fragment UserList_usersWithPage on Query
      @argumentDefinitions(
        filters: { type: [UserFilterInput], defaultValue: [] }
        pageNumber: { type: Int, defaultValue: 0 }
        pageSize: { type: Int, defaultValue: 25 }
      ) {
      page: findUsersWithPage(filters: $filters, pageNumber: $pageNumber, pageSize: $pageSize) {
        totalPages
        totalElements
        users {
          ...MiniProfile_user @relay(mask: false)
        }
      }
    }

    fragment UserList_filterFields on Query {
      accounts: findDistinctUserAccounts
      departments: findDistinctUserDepartments
      expertises: findDistinctUserExpertises
      ranks: findAllUserRankCodes
    }
  `,
  graphql`
    query UserListRefetchQuery($userFilterInput: [UserFilterInput], $pageNumber: Int, $pageSize: Int) {
      ...UserList_usersWithPage
        @arguments(userFilterInput: $userFilterInput, pageNumber: $pageNumber, pageSize: $pageSize)
    }
  `,
);


ERROR:
GraphQLParser: Expected definition for variable `filters` to be an object 
with the following shape: `{type: string, defaultValue?: mixed, nonNull?: 
boolean, list?: boolean}`, got `[object Object]`. Source: document 
`UserList_usersWithPage` file: `scenes/admin/pages/UserList.js`. 

1 个答案:

答案 0 :(得分:0)

我找到了一个似乎可行的解决方案,将完整的参数类型包装在字符串中,并使用“!”在数组中根据需要标记我的数组成员类型:

...
@argumentDefinitions(
  filters: { type: "[Filter!]", defaultValue: [] }
)
...

因此在OP的示例中,这意味着:

export default createRefetchContainer(
  translate('admin')(UserList),
  graphql`
    fragment UserList_usersWithPage on Query
      @argumentDefinitions(
        filters: { type: "[UserFilterInput!]", defaultValue: [] }
        pageNumber: { type: Int, defaultValue: 0 }
        pageSize: { type: Int, defaultValue: 25 }
      ) {
      ...

请注意,空数组仍然是有效的参数类型,因为[Type!]允许使用空数组,但是要求任何成员都必须为Type类型的非null。

我对graphql还是很陌生,可以自我介绍,因此无法进一步了解为什么目前正在工作。