You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
_see also: [tagTypes API reference](../../api/rtk-query/createApi.mdx#tagtypes)_
19
19
20
20
For RTK Query, _tags_ are just a name that you can give to a specific collection of data to control caching and invalidation behavior for refetching purposes. It can be considered as a 'label' attached to cached data that is read after a `mutation`, to decide whether the data should be affected by the mutation.
21
21
@@ -25,15 +25,15 @@ An individual `tag` has a `type`, represented as a `string` name, and an optiona
25
25
26
26
### Providing tags
27
27
28
-
_see also: [Anatomy of an endpoint](../../api/rtk-query/createApi#anatomy-of-an-endpoint)_
28
+
_see also: [providesTags API reference](../../api/rtk-query/createApi.mdx#providestags)_
29
29
30
30
A _query_ can have it's cached data _provide_ tags. Doing so determines which 'tag' is attached to the cached data returned by the query.
31
31
32
32
The `providesTags` argument can either be an array of `string` (such as `['Post']`), `{type: string, id?: string|number}` (such as `[{type: 'Post', id: 1}]`), or a callback that returns such an array. That function will be passed the result as the first argument, the response error as the second argument, and the argument originally passed into the `query` method as the third argument. Note that either the result or error arguments may be undefined based on whether the query was successful or not.
33
33
34
34
### Invalidating tags
35
35
36
-
_see also: [Anatomy of an endpoint](../../api/rtk-query/createApi#anatomy-of-an-endpoint)_
36
+
_see also: [invalidatesTags API reference](../../api/rtk-query/createApi.mdx#invalidatesTags)_
37
37
38
38
A _mutation_ can _invalidate_ specific cached data based on the tags. Doing so determines which cached data will be either refetched or removed from the cache.
Typescript users may wish to use [`skipToken`](../../api/rtk-query/created-api/hooks.mdx#skiptoken) as an alternative to the `skip` option in order to skip running a query, while still keeping types for the endpoint accurate.
Individual endpoints on [`createApi`](../../api/rtk-query/createApi) accept a [`queryFn`](../../api/rtk-query/createApi#anatomy-of-an-endpoint) property which allows a given endpoint to ignore `baseQuery` for that endpoint by providing an inline function determining how that query resolves.
289
+
Individual endpoints on [`createApi`](../../api/rtk-query/createApi) accept a [`queryFn`](../../api/rtk-query/createApi#queryfn) property which allows a given endpoint to ignore `baseQuery` for that endpoint by providing an inline function determining how that query resolves.
290
290
291
291
This can be useful for scenarios where you want to have particularly different behaviour for a single endpoint, or where the query itself is not relevant. Such situations may include:
Copy file name to clipboardExpand all lines: docs/usage/rtk-query/mutations.mdx
+32-42Lines changed: 32 additions & 42 deletions
Original file line number
Diff line number
Diff line change
@@ -11,6 +11,8 @@ Unlike `useQuery`, `useMutation` returns a tuple. The first item in the tuple is
11
11
12
12
Unlike the `useQuery` hook, the `useMutation` hook doesn't execute automatically. To run a mutation you have to call the trigger function returned as the first tuple value from the hook.
13
13
14
+
See [`useMutation`](../../api/rtk-query/created-api/hooks.mdx#usemutation) for the hook signature and additional details.
15
+
14
16
```ts title="Example of all mutation endpoint options"
15
17
// file: types.ts noEmit
16
18
exportinterfacePost {
@@ -68,47 +70,32 @@ const api = createApi({
68
70
Notice the `onQueryStarted` method? Be sure to check out how it can be used for [optimistic updates](./optimistic-updates)
The `useMutation` hook returns a tuple containing a `mutation trigger` function, as well as an object containing properties about the `mutation result`.
78
+
79
+
The `mutation trigger` is a function that when called, will fire off the mutation request for that endpoint. Calling the `mutation trigger` returns a promise with an `unwrap` property, which can be called to unwrap the mutation call and provide the raw response/error. This can be useful if you wish to determine whether the mutation succeeds/fails inline at the call-site.
80
+
81
+
The `mutation result` is an object containing properties such as the latest `data` for the mutation request, as well as status booleans for the current request lifecycle state.
82
+
83
+
Below are some of the most frequently used properties on the `mutation result` object. Refer to [`useMutation`](../../api/rtk-query/created-api/hooks.mdx#usemutation) for an extensive list of all returned properties.
84
+
85
+
-`data` - The returned result if present.
86
+
-`error` - The error result if present.
87
+
-`isUninitialized` - When true, indicates that the mutation has not been fired yet.
88
+
-`isLoading` - When true, indicates that the mutation has been fired and is awaiting a response.
89
+
-`isSuccess` - When true, indicates that the last mutation fired has data from a successful request.
90
+
-`isError` - When true, indicates that the last mutation fired resulted in an error state.
91
+
92
+
:::note
93
+
94
+
With RTK Query, a mutation does contain a semantic distinction between 'loading' and 'fetching' in the way that a [query does](./queries.mdx#frequently-used-query-hook-return-values). For a mutation, subsequent calls are not assumed to be necessarily related, so a mutation is either 'loading' or 'not loading', with no concept of 're-fetching'.
95
+
96
+
:::
110
97
111
-
### Basic Mutation
98
+
#### Example
112
99
113
100
This is a modified version of the complete example you can see at the bottom of the page to highlight the `updatePost` mutation. In this scenario, a post is fetched with `useQuery`, and then a `EditablePostName` component is rendered that allows us to edit the name of the post.
Copy file name to clipboardExpand all lines: docs/usage/rtk-query/queries.mdx
+33-37Lines changed: 33 additions & 37 deletions
Original file line number
Diff line number
Diff line change
@@ -13,6 +13,8 @@ By default, RTK Query ships with [`fetchBaseQuery`](../../api/rtk-query/fetchBas
13
13
14
14
> Depending on your environment, you may need to polyfill `fetch` with `node-fetch` or `cross-fetch` if you choose to use `fetchBaseQuery` or `fetch` on its own.
15
15
16
+
See [`useQuery`](../../api/rtk-query/created-api/hooks.mdx#usequery) for the hook signature and additional details.
17
+
16
18
```ts title="Example of all query endpoint options"
17
19
// file: types.ts noEmit
18
20
exportinterfacePost {
@@ -71,7 +73,7 @@ const api = createApi({
71
73
})
72
74
```
73
75
74
-
### Performing queries with React Hooks
76
+
### Performing Queries with React Hooks
75
77
76
78
If you're using React Hooks, RTK Query does a few additional things for you. The primary benefit is that you get a render-optimized hook that allows you to have 'background fetching' as well as [derived booleans](#query-hook-return-types) for convenience.
77
79
@@ -81,48 +83,42 @@ Hooks are automatically generated based on the name of the `endpoint` in the ser
- Composes `useQuerySubscription` and `useQueryState` and is the primary hook. Automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store.
- Returns a `refetch` function and accepts all hook options. Automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data.
- Returns a tuple with a `fetch` function, the query result, and last promise info. Similar to `useQuery`, but with manual control over when the data fetching occurs.
- Returns a tuple with a `fetch` function, and last promise info. Similar to `useQuerySubscription`, but with manual control over when the data fetching occurs.
94
96
95
97
#### Query Hook Options
96
98
97
-
-[skip](./conditional-fetching) - Defaults to `false`
98
-
-[pollingInterval](./polling) - Defaults to `0`_(off)_
99
-
-[selectFromResult](#selecting-data-from-a-query-result) - Optional, allows you to return a subset of a query
100
-
-[refetchOnMountOrArgChange](../../api/rtk-query/createApi#refetchonmountorargchange) - Defaults to `false`
101
-
-[refetchOnFocus](../../api/rtk-query/createApi#refetchonfocus) - Defaults to `false`
102
-
-[refetchOnReconnect](../../api/rtk-query/createApi#refetchonreconnect) - Defaults to `false`
99
+
-[skip](./conditional-fetching) - Allows a query to 'skip' running for that render. Defaults to `false`
100
+
-[pollingInterval](./polling) - Allows a query to automatically refetch on a provided interval, specified in milliseconds. Defaults to `0`_(off)_
101
+
-[selectFromResult](#selecting-data-from-a-query-result) - Allows altering the returned value of the hook to obtain a subset of the result, render-optimized for the returned subset.
102
+
-[refetchOnMountOrArgChange](../../api/rtk-query/createApi#refetchonmountorargchange) - Allows forcing the query to always refetch on mount (when `true` is provided). Allows forcing the query to refetch if enough time (in seconds) has passed since the last query for the same cache (when a `number` is provided). Defaults to `false`
103
+
-[refetchOnFocus](../../api/rtk-query/createApi#refetchonfocus) - Allows forcing the query to refetch when the browser window regains focus. Defaults to `false`
104
+
-[refetchOnReconnect](../../api/rtk-query/createApi#refetchonreconnect) - Allows forcing the query to refetch when regaining a network connection. Defaults to `false`
103
105
104
106
> All `refetch`-related options will override the defaults you may have set in [createApi](../../api/rtk-query/createApi)
105
107
106
-
#### Query Hook Return Types
107
-
108
-
```ts title="All returned elements" no-transpile
109
-
// Base query state
110
-
originalArgs?:unknown; // Arguments passed to the query
111
-
data?:unknown; // Returned result if present
112
-
error?:unknown; // Error result if present
113
-
requestId?:string; // A string generated by RTK Query
114
-
endpointName?:string; // The name of the given endpoint for the query
115
-
startedTimeStamp?:number; // Timestamp for when the query was initiated
116
-
fulfilledTimeStamp?:number; // Timestamp for when the query was completed
117
-
118
-
isUninitialized: false; // Query has not started yet.
119
-
isLoading: false; // Query is currently loading for the first time. No data yet.
120
-
isFetching: false; // Query is currently fetching, but might have data from an earlier request.
121
-
isSuccess: false; // Query has data from a successful load.
122
-
isError: false; // Query is currently in "error" state.
123
-
124
-
refetch: () =>void; // A function to force refetch the query
125
-
```
108
+
#### Frequently Used Query Hook Return Values
109
+
110
+
The query hook returns an object containing properties such as the latest `data` for the query request, as well as status booleans for the current request lifecycle state. Below are some of the most frequently used properties. Refer to [`useQuery`](../../api/rtk-query/created-api/hooks.mdx#usequery) for an extensive list of all returned properties.
111
+
112
+
-`data` - The returned result if present.
113
+
-`error` - The error result if present.
114
+
-`isUninitialized` - When true, indicates that the query has not started yet.
115
+
-`isLoading` - When true, indicates that the query is currently loading for the first time, and has no data yet. This will be `true` for the first request fired off, but _not_ for subsequent requests.
116
+
-`isFetching` - When true, indicates that the query is currently fetching, but might have data from an earlier request. This will be `true` for both the first request fired off, as well as subsequent requests.
117
+
-`isSuccess` - When true, indicates that the query has data from a successful request.
118
+
-`isError` - When true, indicates that the query is in an `error` state.
119
+
-`refetch` - A function to force refetch the query
Copy file name to clipboardExpand all lines: docs/usage/rtk-query/streaming-updates.mdx
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,7 @@ RTK Query gives you the ability to receive **streaming updates** for persistent
11
11
12
12
Streaming updates can be used to enable the API to receive real-time updates to the back-end data, such as new entries being created, or important properties being updated.
13
13
14
-
To enable streaming updates for a query, pass the asynchronous `onCacheEntryAdded` function to the query, including the logic for how to update the query when streamed data is received. See [anatomy of an endpoint](../../api/rtk-query/createApi#anatomy-of-an-endpoint) for more details.
14
+
To enable streaming updates for a query, pass the asynchronous `onCacheEntryAdded` function to the query, including the logic for how to update the query when streamed data is received. See [`onCacheEntryAdded` API reference](../../api/rtk-query/createApi#onCacheEntryAdded) for more details.
* Defaults to `60` _(this value is in seconds)_. This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.
0 commit comments