useAsync
import { useCallback, useEffect, useState } from 'react'
export default function useAsync(callback, dependencies = []) {
    const [loading, setLoading] = useState(true)
    const [error, setError] = useState()
    const [value, setValue] = useState()
    const callbackMemoized = useCallback(() => {
        setLoading(true)
        setError(undefined)
        setValue(undefined)
        callback()
            .then(setValue)
            .catch(setError)
            .finally(() => setLoading(false))
    }, dependencies)
    useEffect(() => {
        callbackMemoized()
    }, [callbackMemoized])
    return { loading, error, value }
}
介绍
将一个异步方法的调用封装为 hook,参数为该异步方法和依赖项,返回加载状态,错误信息或者返回值。
使用方法
实时编辑器
function AsyncComponent() { const { loading, error, value } = useAsync(() => { return new Promise((resolve, reject) => { const success = false setTimeout(() => { success ? resolve("Success") : reject("Error") }, 1000) }) }) return ( <div> <div>Loading: {loading.toString()}</div> <div>{error}</div> <div>{value}</div> </div> ) }
结果
Loading...