Ich habe eine Relay-Mutation, die einen Post erstellt und ihn einer Post-Liste voranstellt. Das optimistische Update wird den Titel und die URL des Beitrags der Liste voranstellen, bevor die Mutation an meinen GraphQL-Server gesendet wird. Mein Problem ist, dass, wenn die Mutation fehlschlägt oder nicht abgeschlossen werden kann, diese optimistische Aktualisierung automatisch aus der Liste entfernt wird. Gibt es eine Möglichkeit, eine fehlgeschlagene Mutation zu erfassen und zu verarbeiten, sodass ich dem Benutzer eine Nachricht anzeigen kann, die darauf hinweist, dass der Beitrag nicht gespeichert werden kann?Wie fange und handle gescheiterte Mutation in Relay?
Meine Relay Mutation:
import Relay from 'react-relay';
class CreatePostMutation extends Relay.Mutation {
getMutation() {
return Relay.QL`
mutation {
createPost
}
`
}
getVariables() {
return {
title: this.props.title,
url: this.props.url
}
}
getFatQuery() {
return Relay.QL`
fragment on CreatePostPayload {
postEdge,
store {
id
}
}
`;
}
getConfigs() {
return [{
type: 'RANGE_ADD',
parentName: 'store',
parentID: this.props.store.id,
connectionName: 'allPosts',
edgeName: 'postEdge',
rangeBehaviors: {
'': 'prepend'
}
}]
}
getOptimisticResponse() {
return {
postEdge: {
node: {
title: this.props.title,
url: this.props.url
}
}
}
}
}
export default CreatePostMutation;
Meine PostForm Reagieren Komponente:
import React from 'react';
import Relay from 'react-relay';
import CreatePostMutation from '../../mutations/create_post';
class PostForm extends React.Component {
handleSubmit = (e) => {
e.preventDefault();
let {relay, store} = this.props;
let {title, url} = this.refs;
relay.commitUpdate(
new CreatePostMutation({
title: title.value,
url: url.value,
store
})
);
// clear values
title.value = '';
url.value = '';
}
render() {
return (
<div>
<form onSubmit={this.handleSubmit}>
<input name="title" placeholder="Title" ref="title" />
<input name="url" placeholder="URL" ref="url" />
<input type="submit" />
</form>
</div>
)
}
}
export default PostForm;