# SkippableQueryFactoryFn

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

The function `createQueryFactory` returns: a [QueryFactoryFn](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactoryfn/) that
also takes TanStack Query's `skipToken` in place of args, for a component
whose args are not known yet. For `skipToken` it returns a
[SkippedQuery](https://ic-reactor.b3pay.net/v3/libs/type-aliases/skippedquery/), whose `useQuery()` waits without fetching, in an
entry of its own under the factory's `getQueryKey()` prefix. Given
`args ? [args] : skipToken`, it returns either, and `useQuery()` can be
called on the result directly.

`createSuspenseQueryFactory` returns a plain [QueryFactoryFn](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactoryfn/): a
suspense query cannot wait on `skipToken`.

## Example

```typescript
const getBalance = createQueryFactory(ledger, {
  functionName: "icrc1_balance_of",
})

function Balance({ owner }: { owner?: string }) {
  const { data } = getBalance(owner ? [{ owner }] : skipToken).useQuery()
}
```

## Extends

- [`QueryFactoryMethods`](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactorymethods/)

## Type Parameters

### TArgs

`TArgs`

The method's arguments

### TQuery

`TQuery` *extends* `object`

The query object it returns for args

## Call Signature

> **SkippableQueryFactoryFn**(`args`): `TQuery`

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

The function `createQueryFactory` returns: a [QueryFactoryFn](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactoryfn/) that
also takes TanStack Query's `skipToken` in place of args, for a component
whose args are not known yet. For `skipToken` it returns a
[SkippedQuery](https://ic-reactor.b3pay.net/v3/libs/type-aliases/skippedquery/), whose `useQuery()` waits without fetching, in an
entry of its own under the factory's `getQueryKey()` prefix. Given
`args ? [args] : skipToken`, it returns either, and `useQuery()` can be
called on the result directly.

`createSuspenseQueryFactory` returns a plain [QueryFactoryFn](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactoryfn/): a
suspense query cannot wait on `skipToken`.

### Parameters

#### args

`TArgs`

### Returns

`TQuery`

### Example

```typescript
const getBalance = createQueryFactory(ledger, {
  functionName: "icrc1_balance_of",
})

function Balance({ owner }: { owner?: string }) {
  const { data } = getBalance(owner ? [{ owner }] : skipToken).useQuery()
}
```

## Call Signature

> **SkippableQueryFactoryFn**(`args`): [`SkippedQuery`](https://ic-reactor.b3pay.net/v3/libs/type-aliases/skippedquery/)\<`TQuery`\>

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

The function `createQueryFactory` returns: a [QueryFactoryFn](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactoryfn/) that
also takes TanStack Query's `skipToken` in place of args, for a component
whose args are not known yet. For `skipToken` it returns a
[SkippedQuery](https://ic-reactor.b3pay.net/v3/libs/type-aliases/skippedquery/), whose `useQuery()` waits without fetching, in an
entry of its own under the factory's `getQueryKey()` prefix. Given
`args ? [args] : skipToken`, it returns either, and `useQuery()` can be
called on the result directly.

`createSuspenseQueryFactory` returns a plain [QueryFactoryFn](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactoryfn/): a
suspense query cannot wait on `skipToken`.

### Parameters

#### args

*typeof* `skipToken`

### Returns

[`SkippedQuery`](https://ic-reactor.b3pay.net/v3/libs/type-aliases/skippedquery/)\<`TQuery`\>

### Example

```typescript
const getBalance = createQueryFactory(ledger, {
  functionName: "icrc1_balance_of",
})

function Balance({ owner }: { owner?: string }) {
  const { data } = getBalance(owner ? [{ owner }] : skipToken).useQuery()
}
```

## Call Signature

> **SkippableQueryFactoryFn**(`args`): `TQuery` \| [`SkippedQuery`](https://ic-reactor.b3pay.net/v3/libs/type-aliases/skippedquery/)\<`TQuery`\>

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

The function `createQueryFactory` returns: a [QueryFactoryFn](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactoryfn/) that
also takes TanStack Query's `skipToken` in place of args, for a component
whose args are not known yet. For `skipToken` it returns a
[SkippedQuery](https://ic-reactor.b3pay.net/v3/libs/type-aliases/skippedquery/), whose `useQuery()` waits without fetching, in an
entry of its own under the factory's `getQueryKey()` prefix. Given
`args ? [args] : skipToken`, it returns either, and `useQuery()` can be
called on the result directly.

`createSuspenseQueryFactory` returns a plain [QueryFactoryFn](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactoryfn/): a
suspense query cannot wait on `skipToken`.

### Parameters

#### args

*typeof* `skipToken` \| `TArgs`

### Returns

`TQuery` \| [`SkippedQuery`](https://ic-reactor.b3pay.net/v3/libs/type-aliases/skippedquery/)\<`TQuery`\>

### Example

```typescript
const getBalance = createQueryFactory(ledger, {
  functionName: "icrc1_balance_of",
})

function Balance({ owner }: { owner?: string }) {
  const { data } = getBalance(owner ? [{ owner }] : skipToken).useQuery()
}
```

## Call Signature

> **SkippableQueryFactoryFn**(`args`): `TQuery`

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

The function `createQueryFactory` returns: a [QueryFactoryFn](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactoryfn/) that
also takes TanStack Query's `skipToken` in place of args, for a component
whose args are not known yet. For `skipToken` it returns a
[SkippedQuery](https://ic-reactor.b3pay.net/v3/libs/type-aliases/skippedquery/), whose `useQuery()` waits without fetching, in an
entry of its own under the factory's `getQueryKey()` prefix. Given
`args ? [args] : skipToken`, it returns either, and `useQuery()` can be
called on the result directly.

`createSuspenseQueryFactory` returns a plain [QueryFactoryFn](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactoryfn/): a
suspense query cannot wait on `skipToken`.

### Parameters

#### args

`TArgs`

### Returns

`TQuery`

### Example

```typescript
const getBalance = createQueryFactory(ledger, {
  functionName: "icrc1_balance_of",
})

function Balance({ owner }: { owner?: string }) {
  const { data } = getBalance(owner ? [{ owner }] : skipToken).useQuery()
}
```

## Properties

### getQueryKey

> **getQueryKey**: () => readonly `unknown`[]

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

The key prefix every query of this factory shares, whatever its args: the
canister (the config's `callConfig.canisterId`, else the reactor's) and
the method, plus the reactor's transform segment and any agent or
effective-target segment the config's `callConfig` adds, and for an
infinite factory its config `queryKey`. TanStack Query matches keys by
prefix, so the prefix covers every args instance and every infinite page
set. Queries of the same method made elsewhere share it too.

#### Returns

readonly `unknown`[]

#### Example

```typescript
const getBalance = createQueryFactory(ledger, {
  functionName: "icrc1_balance_of",
})

// Every cached balance, whatever the account
ledger.queryClient.getQueriesData({ queryKey: getBalance.getQueryKey() })
```

#### Inherited from

[`QueryFactoryMethods`](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactorymethods/).[`getQueryKey`](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactorymethods/#getquerykey)

***

### invalidate

> **invalidate**: () => `Promise`\<`void`\>

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

Invalidate every query of this factory, whatever its args, on the
reactor's QueryClient. It resolves once the active ones have refetched; a
refetch that fails does not reject it.

#### Returns

`Promise`\<`void`\>

#### Example

```typescript
// After a transfer, refresh every balance on screen
await getBalance.invalidate()
```

#### Inherited from

[`QueryFactoryMethods`](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactorymethods/).[`invalidate`](https://ic-reactor.b3pay.net/v3/libs/interfaces/queryfactorymethods/#invalidate)