# InvalidationTarget

> **InvalidationTarget**\<`Service`, `Transform`\> = `QueryKey` \| [`QueryKeySource`](https://ic-reactor.b3pay.net/v3/libs/interfaces/querykeysource/) \| [`QueryDescriptor`](https://ic-reactor.b3pay.net/v3/libs/type-aliases/querydescriptor/)\<`Service`, `Transform`\> \| `undefined`

Defined in: [react/src/types.ts:764](https://github.com/B3Pay/ic-reactor/blob/f1956947ae037304fce1675a38695964c1aa9e32/packages/react/src/types.ts#L764)

One entry of `invalidateQueries`: which queries a successful mutation
invalidates.

- a query key, as `generateQueryKey` or `getQueryKey()` builds it;
- a query object or query factory ([QueryKeySource](https://ic-reactor.b3pay.net/v3/libs/interfaces/querykeysource/));
- a method of the mutation's own reactor, with or without args
  ([QueryDescriptor](https://ic-reactor.b3pay.net/v3/libs/type-aliases/querydescriptor/));
- `undefined`, which is skipped, so `[maybeQuery]` and
  `[maybeQuery?.getQueryKey()]` are safe when the query is absent.

TanStack Query matches each key by prefix.

## Type Parameters

### Service

`Service` = [`BaseActor`](https://ic-reactor.b3pay.net/v3/libs/type-aliases/baseactor/)

### Transform

`Transform` *extends* [`TransformKey`](https://ic-reactor.b3pay.net/v3/libs/type-aliases/transformkey/) = `"candid"`

## Example

```typescript
createMutation(backend, {
  functionName: "create_post",
  invalidateQueries: [
    postsQuery, // a query object
    getPost, // a query factory: every post, whatever its args
    { functionName: "get_posts_count" }, // a method of this reactor
  ],
})
```