我正在尝试通过useEffect中的异步方法加载数据。我传递所有必要的依赖项,并且据我理解,useEffect应该在组件挂载时、第一次渲染时以及依赖项更改时工作。
useEffect(() => {
console.log('effect')
if (ids.length === 0) {
api.images.all().then((data) => { console.log(data); setIDs(data) }).catch(console.log)
}
}, [ids])
在我的情况下,它会触发3次:挂载(应立即加载数据),第一次渲染(不应进入if语句),以及由于ID更改而触发的(也不应进入if语句)。但useEffect会触发4次,并且会加载数据两次,我无法弄清楚为什么。 组件代码:
//BuildIn
import { useEffect, useState } from 'react'
//Inside
import api from '../services/api.service'
import AsyncImage from '../components/AsyncImage.component'
const ImagesPage = () => {
const [ids, setIDs] = useState([])
useEffect(() => {
console.log('effect')
if (ids.length === 0) {
api.images.all().then((data) => { console.log(data); setIDs(data) }).catch(console.log)
}
}, [ids])
return(
<>
{(ids.length > 0) ? ids.map((id, index) => <AsyncImage guid={id} key={index} />) : <div>No data</div>}
</>
)
}
export default ImagesPage