Skip to content

Commit d023e29

Browse files
committed
Convert maximum depth exceeded error to warning
1 parent 0020b66 commit d023e29

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

src/recyclerview/RecyclerView.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,18 @@ const RecyclerViewComponent = <T,>(
208208
return { index, dimensions: layout };
209209
});
210210

211+
const hasExceededMaxRendersWithoutCommit =
212+
renderTimeTracker.hasExceededMaxRendersWithoutCommit();
213+
214+
if (hasExceededMaxRendersWithoutCommit) {
215+
console.warn(
216+
"FlashList: Exceeded max renders without commit, check for duplicate keys or parent being a ScrollView"
217+
);
218+
}
219+
211220
if (
212-
recyclerViewManager.modifyChildrenLayout(layoutInfo, data?.length ?? 0)
221+
recyclerViewManager.modifyChildrenLayout(layoutInfo, data?.length ?? 0) &&
222+
!hasExceededMaxRendersWithoutCommit
213223
) {
214224
// Trigger re-render if layout modifications were made
215225
setRenderId((prev) => prev + 1);

src/recyclerview/helpers/RenderTimeTracker.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@ export class RenderTimeTracker {
66
private lastTimerStartedAt = -1;
77
private maxRenderTime = 32; // TODO: Improve this even more
88
private defaultRenderTime = 16;
9+
private rendersWithoutCommit = 0;
10+
private maxRendersWithoutCommit = 40;
911

1012
startTracking() {
13+
this.rendersWithoutCommit++;
1114
if (!PlatformConfig.trackAverageRenderTimeForOffsetProjection) {
1215
return;
1316
}
@@ -17,6 +20,7 @@ export class RenderTimeTracker {
1720
}
1821

1922
markRenderComplete() {
23+
this.rendersWithoutCommit = 0;
2024
if (!PlatformConfig.trackAverageRenderTimeForOffsetProjection) {
2125
return;
2226
}
@@ -26,6 +30,10 @@ export class RenderTimeTracker {
2630
}
2731
}
2832

33+
hasExceededMaxRendersWithoutCommit() {
34+
return this.rendersWithoutCommit >= this.maxRendersWithoutCommit;
35+
}
36+
2937
getRawValue() {
3038
return this.renderTimeAvgWindow.currentValue;
3139
}

0 commit comments

Comments
 (0)