|
2 | 2 | title: createResource
|
3 | 3 | ---
|
4 | 4 |
|
5 |
| -This creates a signal that returns the result of an async request. |
6 |
| - |
7 |
| -```ts |
8 |
| -import { createResource } from "solid-js" |
9 |
| -import type { ResourceReturn, ResourceOptions } from "solid-js" |
10 |
| - |
11 |
| -type ResourceReturn<T> = [ |
12 |
| - { |
13 |
| - (): T | undefined |
14 |
| - state: "unresolved" | "pending" | "ready" | "refreshing" | "errored" |
15 |
| - loading: boolean |
16 |
| - error: any |
17 |
| - latest: T | undefined |
18 |
| - }, |
19 |
| - { |
20 |
| - mutate: (v: T | undefined) => T | undefined |
21 |
| - refetch: (info: unknown) => Promise<T> | T |
22 |
| - } |
23 |
| -] |
24 |
| - |
25 |
| -type ResourceOptions<T, S = unknown> = { |
26 |
| - initialValue?: T |
27 |
| - name?: string |
28 |
| - deferStream?: boolean |
29 |
| - ssrLoadFrom?: "initial" | "server" |
30 |
| - storage?: ( |
31 |
| - init: T | undefined |
32 |
| - ) => [Accessor<T | undefined>, Setter<T | undefined>] |
33 |
| - onHydrated?: (k: S | undefined, info: { value: T | undefined }) => void |
34 |
| -} |
35 |
| - |
36 |
| -function createResource<T, U = true>( |
37 |
| - fetcher: ( |
38 |
| - k: U, |
39 |
| - info: { value: T | undefined; refetching: boolean | unknown } |
40 |
| - ) => T | Promise<T>, |
41 |
| - options?: ResourceOptions<T, U> |
42 |
| -): ResourceReturn<T> |
43 |
| - |
44 |
| -function createResource<T, U>( |
45 |
| - source: U | false | null | (() => U | false | null), |
46 |
| - fetcher: ( |
47 |
| - k: U, |
48 |
| - info: { value: T | undefined; refetching: boolean | unknown } |
49 |
| - ) => T | Promise<T>, |
50 |
| - options?: ResourceOptions<T, U> |
51 |
| -): ResourceReturn<T> |
52 |
| - |
53 |
| -``` |
54 |
| - |
55 | 5 | `createResource` takes an asynchronous fetcher function and returns a signal that is updated with the resulting data when the fetcher completes.
|
56 | 6 |
|
57 | 7 | There are two ways to use `createResource`: you can pass the fetcher function as the sole argument, or you can additionally pass a source signal as the first argument.
|
@@ -196,3 +146,55 @@ The `createResource` function takes an optional third argument, an options objec
|
196 | 146 | | onHydrated | `function` | `undefined` | A callback that is called when the resource is hydrated. |
|
197 | 147 | | ssrLoadFrom | `"server" \| "initial"` | `"server"` | The source of the initial value for SSR. If set to `"initial"`, the resource will use the `initialValue` option instead of the value returned by the fetcher. |
|
198 | 148 | | storage | `function` | `createSignal` | A function that returns a signal. This can be used to create a custom storage for the resource. This is still experimental |
|
| 149 | + |
| 150 | +## Note for TypeScript users |
| 151 | + |
| 152 | +The function and type definitions for `createResource` are as follows: |
| 153 | + |
| 154 | +```tsx |
| 155 | +import { createResource } from "solid-js" |
| 156 | +import type { ResourceReturn, ResourceOptions } from "solid-js" |
| 157 | + |
| 158 | +type ResourceReturn<T> = [ |
| 159 | + { |
| 160 | + (): T | undefined |
| 161 | + state: "unresolved" | "pending" | "ready" | "refreshing" | "errored" |
| 162 | + loading: boolean |
| 163 | + error: any |
| 164 | + latest: T | undefined |
| 165 | + }, |
| 166 | + { |
| 167 | + mutate: (v: T | undefined) => T | undefined |
| 168 | + refetch: (info: unknown) => Promise<T> | T |
| 169 | + } |
| 170 | +] |
| 171 | + |
| 172 | +type ResourceOptions<T, S = unknown> = { |
| 173 | + initialValue?: T |
| 174 | + name?: string |
| 175 | + deferStream?: boolean |
| 176 | + ssrLoadFrom?: "initial" | "server" |
| 177 | + storage?: ( |
| 178 | + init: T | undefined |
| 179 | + ) => [Accessor<T | undefined>, Setter<T | undefined>] |
| 180 | + onHydrated?: (k: S | undefined, info: { value: T | undefined }) => void |
| 181 | +} |
| 182 | + |
| 183 | +function createResource<T, U = true>( |
| 184 | + fetcher: ( |
| 185 | + k: U, |
| 186 | + info: { value: T | undefined; refetching: boolean | unknown } |
| 187 | + ) => T | Promise<T>, |
| 188 | + options?: ResourceOptions<T, U> |
| 189 | +): ResourceReturn<T> |
| 190 | + |
| 191 | +function createResource<T, U>( |
| 192 | + source: U | false | null | (() => U | false | null), |
| 193 | + fetcher: ( |
| 194 | + k: U, |
| 195 | + info: { value: T | undefined; refetching: boolean | unknown } |
| 196 | + ) => T | Promise<T>, |
| 197 | + options?: ResourceOptions<T, U> |
| 198 | +): ResourceReturn<T> |
| 199 | + |
| 200 | +``` |
0 commit comments