Я пытаюсь создать новый объект, используя описанную ниже мутацию на стороне клиента:
import Relay from 'react-relay'
export default class CreateThemeMutation extends Relay.Mutation {
static fragments = {
admin: () => Relay.QL`fragment on Admin { id }`,
};
getMutation() {
return Relay.QL`mutation { createTheme }`
}
getFatQuery() {
return Relay.QL`
fragment on CreateThemePayload {
admin { themes }
themeEdge
}
`
}
getVariables() {
return {
name: this.props.name,
}
}
getConfigs() {
return [{
type: 'RANGE_ADD',
parentName: 'admin',
parentID: this.props.admin.id,
connectionName: 'themes',
edgeName: 'themeEdge',
rangeBehaviors: {
'': 'append',
},
}]
}
}
Корневое поле запроса admin
очень похоже на viewer
, так что это не должно быть проблемой. Проблема в том, что я не нашел themeEdge
(который, я считаю, должен присутствовать) в полезной нагрузке запроса (хотя admin { themes }
есть):
query: "mutation CreateThemeMutation($input_0:CreateThemeInput!){createTheme(input:$input_0){clientMutationId,...F3}} fragment F0 on Admin{id} fragment F1 on Admin{id,...F0} fragment F2 on Admin{_themes2gcwoM:themes(first:20,query:""){count,pageInfo{hasNextPage,hasPreviousPage,startCursor,endCursor},edges{node{id,name,createdAt},cursor}},id,...F1} fragment F3 on CreateThemePayload{admin{id,...F0,id,...F2}}"
variables: {input_0: {name: "test", clientMutationId: "0"}}
В результате outputFields.themeEdge.resolve
внутри мутации на стороне сервера никогда не вызывается, и я вижу это сообщение:
Warning: writeRelayUpdatePayload(): Expected response payload to include the newly created edge `themeEdge` and its `node` field. Did you forget to update the `RANGE_ADD` mutation config?
Я видел подобную проблему на github. Однако REQUIRED_CHILDREN
не мой случай, потому что приложение уже запросило themes
соединение. Я упускаю что-то очевидное? Должен ли я вставить больше информации? Спасибо.
версия реакции-реле: 0.6.1