第一个参数是函数
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])