[React] useAsync
const defaultInitialState = {status: 'idle', data: null, error: null} export function useAsync(initialState) { const initialStateRef = React.useRef({ ...defaultInitialState, ...initialState, }) const [{status, data, error}, setState] = React.useReducer( (s, a) => ({...s, ...a}), initialStateRef.current, ) const safeSetState = useSafeDispatch(setState) const run = React.useCallback( promise => { if (!promise || !promise.then) { throw new Error( `The argument passed to useAsync().run must be a promise. Maybe a function that's passed isn't returning anything?`, ) } safeSetState({status: 'pending'}) return promise.then( data => { safeSetState({data, status: 'resolved'}) return data }, error => { safeSetState({status: 'rejected', error}) return error }, ) }, [safeSetState], ) const setData = React.useCallback(data => safeSetState({data}), [ safeSetState, ]) const setError = React.useCallback(error => safeSetState({error}), [ safeSetState, ]) const reset = React.useCallback(() => safeSetState(initialStateRef.current), [ safeSetState, ]) return { // using the same names that react-query uses for convenience isIdle: status === 'idle', isLoading: status === 'pending', isError: status === 'rejected', isSuccess: status === 'resolved', setData, setError, error, status, data, run, reset, } }
Using:
const {data: items, run} = useAsync({data: [], status: 'pending'}) React.useEffect(() => { run(getItems(inputValue)) }, [inputValue, run])
分类:
React
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2018-10-23 [WASM] Create a New Rust/Webpack Project using the rust-webpack Template
2018-10-23 [Adobe Analytics] Segments types
2018-10-23 [WASM] Set up wasm-bindgen for easy Rust/JavaScript Interoperability
2016-10-23 [RxJS] Multicasting shortcuts: publish() and variants
2016-10-23 [RxJS] RefCount: automatically starting and stopping an execution
2015-10-23 [Angular 2] Inject Service
2015-10-23 [Angular 2] Use Service use Typescript