实现基本产品查询与页面展示
This commit is contained in:
@@ -2,6 +2,7 @@ import {
|
||||
type Dispatch,
|
||||
type SetStateAction,
|
||||
useCallback,
|
||||
useEffect,
|
||||
useState,
|
||||
} from "react"
|
||||
import { toast } from "sonner"
|
||||
@@ -49,3 +50,24 @@ export function useFetch<TArgs extends unknown[], TResult>(
|
||||
],
|
||||
)
|
||||
}
|
||||
|
||||
type Action = <P extends unknown[], R>(...args: P) => Promise<R>
|
||||
|
||||
export function useAction(action: Action) {
|
||||
const [status, setStatus] = useStatus()
|
||||
const func = useCallback(
|
||||
async (...args: Parameters<Action>) => {
|
||||
try {
|
||||
setStatus("load")
|
||||
await action(...args)
|
||||
setStatus("done")
|
||||
} catch (e) {
|
||||
setStatus("fail")
|
||||
throw e
|
||||
}
|
||||
},
|
||||
[action, setStatus],
|
||||
)
|
||||
|
||||
return [func, status]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user