33

私は次のような突然変異を持っています

mutation deleteRecord($id: ID) {
    deleteRecord(id: $id) {
        id
    }
}

別の場所に要素のリストがあります。

サーバーから返すことができるより良いものはありますか?リストを更新するにはどうすればよいですか?

より一般的には、apollo/graphql で削除を処理するためのベスト プラクティスは何ですか?

4

6 に答える 6

20

それが良い練習スタイルかどうかはわかりませんが、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);
于 2016-11-21T20:47:49.573 に答える
4

個人的には、int削除されたアイテムの数を表す を返します。次に、 を使用しupdateQueriesてドキュメントをキャッシュから削除します。

于 2016-11-09T11:31:16.143 に答える