跳到主要内容

useDeleteMany

useDeleteMany is a modified version of react-query's useMutation for multiple delete mutations.

It uses deleteMany method as mutation function from the dataProvider which is passed to <Refine>.

提示

If your data provider didn't implement deleteMany method, useDeleteMany will use deleteOne method multiple times instead.

Features

Usage

Let's say that we have a resource named categories.

https://api.fake-rest.refine.dev/categories
{
[
{
id: 1,
title: "E-business",
},
{
id: 2,
title: "Virtual Invoice Avon",
},
{
id: 3,
title: "Specialist Avon Steel",
},
];
}
import { useDeleteMany } from "@pankod/refine-core";

const { mutate } = useDeleteMany();

mutate({
resource: "categories",
ids: [2, 3],
});
提示

mutate can also accept lifecycle methods like onSuccess and onError.

mutate(
{
resource: "categories",
ids: [2, 3],
},
{
onError: (error, variables, context) => {
// An error happened!
},
onSuccess: (data, variables, context) => {
// Let's celebrate!
},
},
);

Refer to react-query docs for further information.


After mutation runs categories will be updated as below:

https://api.fake-rest.refine.dev/categories
{
[
{
id: 1,
title: "E-business",
},
];
}

备注

Queries that use /categories endpoint will be automatically invalidated to show the updated data. For example, data returned from useList will be automatically updated.

提示

useDeleteMany returns react-query's useMutation result which includes a lot properties, one of which being mutate.

警告

Values passed to mutate must have these types.

{
ids: BaseKey[];
resource: string;
values: TVariables = {};
mutationMode?: MutationMode;
undoableTimeout?: number;
onCancel?: (cancelMutation: () => void) => void;
}

Mutation mode

Mutation mode determines the mode which the mutation runs with.

import { useDeleteMany } from "@pankod/refine-core";

const { mutate } = useDeleteMany();

mutate({
resource: "categories",
ids: [2, 3],
mutationMode: "optimistic",
});

Refer to the mutation mode docs for further information.

Creating a custom method for cancelling mutations

You can pass a custom cancel callback to useUpdate. This callback is triggered instead of the default one when undo button is clicked when mutationMode = "undoable".

警告

Default behaviour on undo action includes notifications. If a custom callback is passed this notification will not appear.

危险

Passed callback will receive a function that actually cancels the mutation. Don't forget to run this function to cancel the mutation on the undoable mode.

import { useDeleteMany } from "@pankod/refine-core";

const customOnCancel = (cancelMutation: () => void) => {
cancelMutation();
// rest of custom cancel logic...
};

const { mutate } = useDeleteMany();

mutate({
resource: "categories",
ids: [1, 2],
mutationMode: "undoable",
undoableTimeout: 7500,
onCancel: customOnCancel,
});

After 7.5 seconds the mutation will be executed. The mutation can be cancelled within that 7.5 seconds. If cancelled customOnCancel will be executed


API

Properties

PropertyDescriptionTypeDefault
resource
Required
Resource name for API data interactionsstring
ids
Required
ids for mutation functionBaseKey[]
mutationModeDetermines when mutations are executed "pessimistic | "optimistic | "undoable""pessimistic"*
undoableTimeoutDuration to wait before executing the mutation when mutationMode = "undoable"number5000ms*
onCancelCallback that runs when undo button is clicked on mutationMode = "undoable"(cancelMutation: () => void) => void
successNotificationSuccessful Mutation notificationSuccessErrorNotification"Successfully deleted resource"
errorNotificationUnsuccessful Mutation notificationSuccessErrorNotification"Error when updating resource (status code: statusCode)"
metaDataMetadata query for dataProviderMetaDataQuery{}
dataProviderNameIf there is more than one dataProvider, you should use the dataProviderName that you will use.stringdefault
invalidatesYou can use it to manage the invalidations that will occur at the end of the mutation.all, resourceAll, list, many, detail, false["list", "many"]

*: These props have default values in RefineContext and can also be set on <Refine> component. useDeleteMany will use what is passed to <Refine> as default but a local value will override it.


Type Parameters

PropertyDesriptionTypeDefault
TDataResult data of the mutation. Extends BaseRecordBaseRecordBaseRecord
TErrorCustom error object that extends HttpErrorHttpErrorHttpError
TVariablesValues for mutation function{}{}

Return value

DescriptionType
Result of the react-query's useMutationUseMutationResult<
{ data: TData },
TError,
{ resource: string; ids: BaseKey[]; },
DeleteContext>
*