我的组件显示一个包含用户的表。用户被加载(getOverviewCitizensToday()
(到redux状态,并作为组件作为道具传递(mapStateToProps
(。要请求用户列表,我需要指定offset
(users.length
(,因此我的useEffect需要users
作为依赖项。
useEffect(() => {
async function fetchData(): Promise<void> {
const query: NewOverviewServiceUserQueryParameters = {
offset: users.length,
sort: transformSortingParams(sorting.order, sorting.orderBy) || undefined,
}
await getOverviewCitizensToday(query)
}
fetchData()
}, [getOverviewCitizensToday, sorting.order, sorting.orderBy, users.length])
这会导致无限循环,因为getOverviewCitizensToday()
会更新用户,从而导致useEffect重新运行。。。
避免这种无限循环的最佳方法是什么?
useEffect(() => {
async function fetchData(): Promise<void> {
console.log('fetch')
const query: NewOverviewServiceUserQueryParameters = {
offset: users.length,
sort: transformSortingParams(sorting.order, sorting.orderBy) || undefined,
}
await getOverviewCitizensToday(query)
}
fetchData()
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [sorting.order, sorting.orderBy])
我有过类似的场景,我希望它只在某些依赖项上执行,但useEffect
对它使用的其他变量很谨慎。额外的评论将删除警告,尽管我知道这不是最佳做法。