Skip to content

Commit 22a9d27

Browse files
devongovettLFDanLu
andauthored
fix: Improve performance of collection updates in React transitions (#8204)
* sample story with performance bug * skip updating collection for disconnected nodes --------- Co-authored-by: Daniel Lu <[email protected]>
1 parent 2a2d571 commit 22a9d27

File tree

2 files changed

+453
-5
lines changed

2 files changed

+453
-5
lines changed

packages/@react-aria/collections/src/Document.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,9 @@ export class BaseNode<T> {
140140
this.lastChild = child;
141141

142142
this.ownerDocument.markDirty(this);
143-
this.ownerDocument.queueUpdate();
143+
if (this.isConnected) {
144+
this.ownerDocument.queueUpdate();
145+
}
144146
}
145147

146148
insertBefore(newNode: ElementNode<T>, referenceNode: ElementNode<T>): void {
@@ -166,7 +168,9 @@ export class BaseNode<T> {
166168
newNode.parentNode = referenceNode.parentNode;
167169

168170
this.invalidateChildIndices(referenceNode);
169-
this.ownerDocument.queueUpdate();
171+
if (this.isConnected) {
172+
this.ownerDocument.queueUpdate();
173+
}
170174
}
171175

172176
removeChild(child: ElementNode<T>): void {
@@ -197,7 +201,9 @@ export class BaseNode<T> {
197201
child.index = 0;
198202

199203
this.ownerDocument.markDirty(child);
200-
this.ownerDocument.queueUpdate();
204+
if (this.isConnected) {
205+
this.ownerDocument.queueUpdate();
206+
}
201207
}
202208

203209
addEventListener(): void {}
@@ -328,7 +334,9 @@ export class ElementNode<T> extends BaseNode<T> {
328334
}
329335

330336
this.hasSetProps = true;
331-
this.ownerDocument.queueUpdate();
337+
if (this.isConnected) {
338+
this.ownerDocument.queueUpdate();
339+
}
332340
}
333341

334342
get style(): CSSProperties {

0 commit comments

Comments
 (0)