[as instl] 상태 업데이트 로직 개선: 기존 키의 변화에 따라 상태를 업데이트하도록 수정 Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.
This commit is contained in:
@@ -162,11 +162,34 @@ function CnfmRegistPage() {
|
||||
useEffect(() => {
|
||||
setCheckResults((prev) => {
|
||||
const next: Record<string, CheckResultVal> = {};
|
||||
let changed = false;
|
||||
|
||||
cklstRows.forEach((row) => {
|
||||
const key = cklstKey(row);
|
||||
next[key] = prev[key] ?? null;
|
||||
if (Object.prototype.hasOwnProperty.call(prev, key)) {
|
||||
next[key] = prev[key];
|
||||
} else {
|
||||
next[key] = null;
|
||||
changed = true;
|
||||
}
|
||||
});
|
||||
return next;
|
||||
|
||||
// 기존 key가 사라졌거나 값이 달라진 경우만 상태 업데이트
|
||||
if (!changed) {
|
||||
const prevKeys = Object.keys(prev);
|
||||
if (prevKeys.length !== Object.keys(next).length) {
|
||||
changed = true;
|
||||
} else {
|
||||
for (const key of prevKeys) {
|
||||
if (!(key in next) || prev[key] !== next[key]) {
|
||||
changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return changed ? next : prev;
|
||||
});
|
||||
}, [cklstRows]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user