Skip to content

Commit d537b56

Browse files
authored
fix(react-start-client): useServerFn returns a stable reference (#4647)
1 parent 9fb55b8 commit d537b56

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed
Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import * as React from 'react'
12
import { isRedirect } from '@tanstack/router-core'
23
import { useRouter } from '@tanstack/react-router'
34

@@ -6,22 +7,25 @@ export function useServerFn<T extends (...deps: Array<any>) => Promise<any>>(
67
): (...args: Parameters<T>) => ReturnType<T> {
78
const router = useRouter()
89

9-
return (async (...args: Array<any>) => {
10-
try {
11-
const res = await serverFn(...args)
10+
return React.useCallback(
11+
async (...args: Array<any>) => {
12+
try {
13+
const res = await serverFn(...args)
1214

13-
if (isRedirect(res)) {
14-
throw res
15-
}
15+
if (isRedirect(res)) {
16+
throw res
17+
}
1618

17-
return res
18-
} catch (err) {
19-
if (isRedirect(err)) {
20-
err.options._fromLocation = router.state.location
21-
return router.navigate(router.resolveRedirect(err).options)
22-
}
19+
return res
20+
} catch (err) {
21+
if (isRedirect(err)) {
22+
err.options._fromLocation = router.state.location
23+
return router.navigate(router.resolveRedirect(err).options)
24+
}
2325

24-
throw err
25-
}
26-
}) as any
26+
throw err
27+
}
28+
},
29+
[router, serverFn],
30+
) as any
2731
}

0 commit comments

Comments
 (0)