GraphQL删除mutation在Strapi playground正常,Vue前端无法传id如何解决?
问题原因
你有两个传参逻辑错误:
- 你声明的GraphQL mutation接收的变量名为
$id,但你触发deleteInvoice时传递的变量键名是item,字段名不匹配导致参数无法识别 - 如果你用了useMutation的第二个参数做变量封装,调用时不需要再嵌套
variables层,否则会导致参数结构错误
修正方案
方案1(保留变量封装逻辑,代码更简洁)
const { mutate: deleteInvoice } = useMutation(gql` mutation deleteInvoice($id: ID!) { deleteInvoice(input: { where: { id: $id } }) { invoice { id } } }`, (id) => ({ variables: { id } }) ) const onDeleteClicked = (item) => { // 直接传入id值即可,不需要再包variables deleteInvoice(item.id) alert(item.id) }
方案2(去掉变量封装,直接传参,逻辑更直观)
const { mutate: deleteInvoice } = useMutation(gql` mutation deleteInvoice($id: ID!) { deleteInvoice(input: { where: { id: $id } }) { invoice { id } } }` ) const onDeleteClicked = (item) => { // 变量键名和mutation定义的$id保持一致 deleteInvoice({ variables: { id: item.id } }) alert(item.id) }
可选适配调整
如果是Strapi v3版本,mutation的input结构不需要嵌套where,调整GraphQL语句即可:
mutation deleteInvoice($id: ID!) { deleteInvoice(input: { id: $id }) { invoice { id } } }
内容的提问来源于stack exchange,提问作者Gosmith
相关产品推荐
相关产品推荐

