Нужна ли мне отдельная мутация для каждого удаления?

Итак, я создаю приложение React / Apollo и немного зацикливаюсь на удалении вещей.

В моем приложении Redux мое действие «удалить» просто передает тип и идентификатор объекта моему редуктору, где я удаляю объект из своего нормализованного состояния. Таким образом, я могу использовать одно и то же действие / компонент / редуктор «удалить» для всех объектов. Аккуратный!

В Apollo мне нужно выбрать один запрос, который ссылается на этот объект, и прочитать / записать его в функции update, верно? Например, если бы я удалял Person, мне нужно было бы найти какой-нибудь случайный запрос, который включает Persons, и использовать его?

Будет ли плохой практикой иметь только один запрос, который получает все, а затем удалять объект оттуда? Или я могу просто удалить его откуда Аполлон все нормализует?

Я думаю, что это как бы побеждает цель GraphQL иметь запрос GET_EVERYTHING, в котором есть все сущности, но альтернатива просто звучит как огромный беспорядок.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
588
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обычно у вас есть одна мутация удаления для каждого типа / узла. Например. deleteUser, deleteBook, deleteMessage и т. д. Входными данными для этих мутаций обычно будет идентификатор или список идентификаторов, если вы хотите иметь возможность удалить несколько записей одновременно.

У вас также может быть мутация deleteNode, если вы хотите иметь возможность удалять любой тип объекта с одной мутацией. Затем вы должны сделать все удаляемые типы унаследованными от типа узла - и убедиться, что идентификаторы действительно уникальны для всех типов.

Пример с мутациями удаления для каждой сущности и с общим удалением по узлу:

interface Node {
  id: ID!
}

type Person implements Node {
  id: ID!
  firstName: String!
  lastName: String!
}

type Book implements Node {
  id: ID!
  title: String!
  author: String!
}

union NodeEntity = Person | Book

type Query {
  person(id: ID!): Person
  persons: [Person!]! # You may want to limit the number of returned items

  # ... same thing for Book

  node(id: ID!): Node
  nodes: [Node!]! # You may want to limit the number of returned items
}

type Mutation {
  createPerson(input: CreatePersonInput!): CreatePersonPayload!
  updatePerson(input: UpdatePersonInput!): UpdatePersonPayload!
  deletePerson(input: DeletePersonInput!): DeletePersonPayload!

  # ... same thing for Book

  deleteNode(input: DeleteNodeInput!): DeleteNodePayload!

  # or simply:
  # deleteNode(id: String!): Boolean!
}

# Mutation inputs
input CreatePersonInput {
  firstName: String!
  lastName: String!
}

input UpdatePersonInput {
  personId: ID!
  firstName: String
  lastName: String
}

input DeletePersonInput {
  personId: ID!
}

input DeleteNodeInput {
  nodeId: ID!
}

# Mutation results
type CreatePersonPayload {
  person: Person!
}

type UpdatePersonPayload {
  person: Person!
}

type DeletePersonPayload {
  person: Person!
}

type DeleteNodePayload {
  node: NodeEntity!

  # or simply:
  # node: Node
}

Надеюсь это поможет!

Да, я думаю, что в случае с Аполлоном имеет смысл задать для всех разные запросы. Ура, Микаэль!

MitchEff 27.07.2018 06:20

Другие вопросы по теме