Ho una pagina che utilizza la connessione Relay GraphQL che recupera drafts
.GraphQL Relay Mutation Config RANGE_ADD's parentName per connessioni
query {
connections {
drafts(first: 10) {
edges {
node {
... on Draft {
id
}
}
}
}
}
}
In questa pagina, ho anche creare progetto attraverso CreateDraftMutation
.
mutation {
createDraft(input: {
clientMutationId: "1"
content: "content"
}) {
draft {
id
content
}
}
}
Dopo questa mutazione, voglio che Relay aggiunga la bozza creata nel suo archivio. Il miglior candidato per la mutazione config è RANGE_ADD, che è documentata come segue:
https://facebook.github.io/relay/docs/guides-mutations.html
RANGE_ADD Dato un genitore, una connessione, e il nome del bordo appena creato nel payload risposta Relay aggiungerà il nodo al negozio e collegarlo alla connessione in base al comportamento dell'intervallo specificato.
Argomenti
ParentName: stringa Il nome del campo nella risposta che rappresenta il genitore della connessione
parentID: stringa La dataID del nodo padre che contiene il collegamento
connectionName: stringa Il nome del campo nella risposta che rappresenta la connessione
edgeName: stringa Il nome del campo nella risposta che rappresenta il bordo appena creato
rangeBehaviors: {[chiamata: stringa]: GraphQLMutatorConstants.RANGE_OPERATIONS}
Una mappa tra stampata, separata da punti GraphQL chiama in ordine alfabetico, e il comportamento che vogliamo che il relay esca quando si aggiunge il nuovo edge alle connessioni sotto l'influenza di quelle chiamate. I comportamenti possono essere uno di "append", "ignore", "prepend", "refetch" o "remove".
L'esempio dalla documentazione va come le seguenti:
class IntroduceShipMutation extends Relay.Mutation {
// This mutation declares a dependency on the faction
// into which this ship is to be introduced.
static fragments = {
faction:() => Relay.QL`fragment on Faction { id }`,
};
// Introducing a ship will add it to a faction's fleet, so we
// specify the faction's ships connection as part of the fat query.
getFatQuery() {
return Relay.QL`
fragment on IntroduceShipPayload {
faction { ships },
newShipEdge,
}
`;
}
getConfigs() {
return [{
type: 'RANGE_ADD',
parentName: 'faction',
parentID: this.props.faction.id,
connectionName: 'ships',
edgeName: 'newShipEdge',
rangeBehaviors: {
// When the ships connection is not under the influence
// of any call, append the ship to the end of the connection
'': 'append',
// Prepend the ship, wherever the connection is sorted by age
'orderby(newest)': 'prepend',
},
}];
}
/* ... */
}
Se il genitore è così evidente come fazione, questo è un pezzo di torta, ma sto avendo difficoltà a identificare e ParentName parentID se proviene direttamente da connessioni di query.
Come posso fare?
Edit:
Questo è il modo interrogazione è stato esportato.
export default new GraphQLObjectType({
name: 'Query',
fields:() => ({
node: nodeField,
viewer: {
type: viewerType,
resolve:() => ({}),
},
connections: {
type: new GraphQLObjectType({
name: 'Connections',
che in cambio utilizzato nel contenitore relè
export default Relay.createContainer(MakeRequestPage, {
fragments: {
connections:() => Relay.QL`
fragment on Connections {
'connections' nella query un oggetto GraphQL o una connessione? –
@AhmadFerdousBinAlam Ho aggiunto lo snippet qui sotto. GraphQLObjectType 'Connections' viene fornito con campi che sono campi di connessione. – lustdante