私は次のような突然変異を持っています
mutation deleteRecord($id: ID) {
deleteRecord(id: $id) {
id
}
}
別の場所に要素のリストがあります。
サーバーから返すことができるより良いものはありますか?リストを更新するにはどうすればよいですか?
より一般的には、apollo/graphql で削除を処理するためのベスト プラクティスは何ですか?
私は次のような突然変異を持っています
mutation deleteRecord($id: ID) {
deleteRecord(id: $id) {
id
}
}
別の場所に要素のリストがあります。
サーバーから返すことができるより良いものはありますか?リストを更新するにはどうすればよいですか?
より一般的には、apollo/graphql で削除を処理するためのベスト プラクティスは何ですか?
それが良い練習スタイルかどうかはわかりませんが、react-apollo で updateQueries を使用してアイテムの削除を処理する方法は次のとおりです。
import { graphql, compose } from 'react-apollo';
import gql from 'graphql-tag';
import update from 'react-addons-update';
import _ from 'underscore';
const SceneCollectionsQuery = gql `
query SceneCollections {
myScenes: selectedScenes (excludeOwner: false, first: 24) {
edges {
node {
...SceneCollectionScene
}
}
}
}`;
const DeleteSceneMutation = gql `
mutation DeleteScene($sceneId: String!) {
deleteScene(sceneId: $sceneId) {
ok
scene {
id
active
}
}
}`;
const SceneModifierWithStateAndData = compose(
...,
graphql(DeleteSceneMutation, {
props: ({ mutate }) => ({
deleteScene: (sceneId) => mutate({
variables: { sceneId },
updateQueries: {
SceneCollections: (prev, { mutationResult }) => {
const myScenesList = prev.myScenes.edges.map((item) => item.node);
const deleteIndex = _.findIndex(myScenesList, (item) => item.id === sceneId);
if (deleteIndex < 0) {
return prev;
}
return update(prev, {
myScenes: {
edges: {
$splice: [[deleteIndex, 1]]
}
}
});
}
}
})
})
})
)(SceneModifierWithState);
個人的には、int
削除されたアイテムの数を表す を返します。次に、 を使用しupdateQueries
てドキュメントをキャッシュから削除します。