Я пытаюсь определить свой 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`.


Я нашел решение, которое, по-видимому, работает, заключая полный тип аргумента в строку и помечая мой тип члена массива как требуется в массиве, используя "!":
...
@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.
Я все еще довольно новичок в graphql и ретрансляции, поэтому не могу вдаваться в подробности о Зачем, это работает в настоящее время.
Избавьтесь от скобок вокруг
UserFilterInput