Reactjs 每次删除都需要单独的突变吗?

Reactjs 每次删除都需要单独的突变吗?,reactjs,graphql,apollo,react-apollo,Reactjs,Graphql,Apollo,React Apollo,所以我正在开发一个React/Apollo应用程序,我有点坚持删除东西 在我的Redux应用程序中,我的“删除”操作只是将对象类型和ID传递给我的reducer,在那里我将对象从规范化状态中删除。这样,我可以对所有对象使用相同的“删除”操作/组件/减速器。干净利落 在Apollo中,我需要选择一个引用此对象的查询,并在update函数中对其进行读/写,对吗?比如,如果我正在删除一个人,我需要找到一些包含人的随机查询并使用它 如果只使用一个查询获取所有内容,然后从中删除对象,这会是一种糟糕的做法吗

所以我正在开发一个React/Apollo应用程序,我有点坚持删除东西

在我的Redux应用程序中,我的“删除”操作只是将对象类型和ID传递给我的reducer,在那里我将对象从规范化状态中删除。这样,我可以对所有对象使用相同的“删除”操作/组件/减速器。干净利落

在Apollo中,我需要选择一个引用此对象的查询,并在
update
函数中对其进行读/写,对吗?比如,如果我正在删除一个
,我需要找到一些包含
的随机查询并使用它

如果只使用一个查询获取所有内容,然后从中删除对象,这会是一种糟糕的做法吗?或者我可以把它从阿波罗正常化的地方移走吗


我认为它有点违背了GraphQL的目的,即拥有一个包含所有实体的
GET\u EVERYTHING
查询,但另一种选择听起来像是一团混乱

每个类型/节点通常有一个删除突变。例如deleteUser、deleteBook、deleteMessage等。如果您希望能够一次删除多个条目,那么这些突变的输入通常是一个ID或ID列表

如果您想通过一次变异删除任何类型的对象,还可以使用deleteNode变异。然后,您应该使所有可删除类型继承自节点类型,并确保ID在所有类型之间真正唯一

每个实体删除突变和按节点一般删除的示例:

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
}

希望这有帮助

是的,我认为在阿波罗的例子中,对所有人都有一个不同的查询可能是最有意义的。干杯,米凯尔!