【发布时间】:2021-09-22 21:16:20
【问题描述】:
我正在尝试在 useEffect 上处理一些 api 数据,在处理数据时我需要将其设置为各种状态,在处理数据时,由于某些原因 useEffect 被无限触发。尽管从类组件中我知道 setState 是一个不等待 forEach 完成的异步操作。我们有针对功能组件的解决方法吗?
useEffect(() => {
const apiResponse = fetchAppName();
apiResponse.then(
(response) => {
// if (response.statusCode === '200' && response.status.statusType === 'SUCCESS' && response.data) {
const dataFields = {};
const appNameValues = [];
dummyData.data.forEach((ele) => {
const workFlowIds = [];
ele.workflowConfigs.forEach((wc) => {
workFlowIds.push(wc.workflowId);
})
dataFields[ele.name] = workFlowIds;
});
Object.keys(dataFields).forEach((k) => {
appNameValues.push(k);
});
setAppData(dataFields);
setDropDownOptions({
...dropDownOptions,
appName: appNameValues,
});
// }
}).catch((e)=>{
console.log('Failed to fetchAppNames due to: ', e);
});
},[setDropDownOptions, dropDownOptions]);
【问题讨论】:
-
不要把setter放在依赖数组中
-
即使在那之后它也被无限调用@Jazz
-
您希望效果何时运行?
-
你设置它,然后在设置它时调用它,所以它正在创建一个循环我认为你应该删除这两个依赖项
-
@DrewReese:我想在第一个 forEach 循环完成后运行这个效果,基本上在所有 forEach 完成时调用 setDropDownOptions
标签: reactjs react-hooks use-effect use-state