useEffect里的异步

141 阅读1分钟

第一个参数是函数

useEffect的第一个参数应该是一个函数,它要不不返回任何东西(未定义),要么返回一个函数(以清除副作用)。但是async函数返回Promise,它不能作为函数调用。
// 错误写法
useEffect(async ()=> {
    const data = await fetchData();
}, [fetchData])

写在内部

useEffect(() => {
    const fetchData = async () => {
        const data = await fetch('');
        setData(data);
    }
    
    fetchData().catch((err) => console.log(err))
})

写在外部

const fetchData = useCallBack(async() => {
    const data = await fetch('');
    setData(data);
}, [])

// useEffect 只在适当的时候调用fetchData
useEffect(() => {
    fetchData().catch((err) => console.log(err))
}, [fetchData])