⚠ This page is served via a proxy. Original site: https://github.com
This service does not collect credentials or authentication data.
Skip to content

Conversation

@sebmarkbage
Copy link
Collaborator

@sebmarkbage sebmarkbage commented Jan 12, 2026

Stacked on #35485.

Before this PR, the startGestureTransition API would itself never commit its state. After the gesture releases it stops the animation in the next commit which just leaves the DOM tree in the original state. If there's an actual state change from the Action then that's committed as the new DOM tree. To avoid animating from the original state to the new state again, this is DOM without an animation. However, this means that you can't have the actual action committing be in a slightly different state and animate between the final gesture state and into the new action.

Instead, we now actually keep the render tree around and commit it in the end. Basically we assume that if the Timeline was closer to the end then visually you're already there and we can commit into that state. Most of the time this will be at the actual end state when you release but if you have something else cancelling the gesture (e.g. touchcancel) it can still commit this state even though your gesture recognizer might not consider this an Action. I think this is ok and keeps it simple.

When the gesture lane commits, it'll leave a Transition behind as work from the revert lanes on the Optimistic updates. This means that if you don't do anything in the Action this will cause another commit right after which reverts. This revert can animate the snap back.

There's a few fixes needed in follow up PRs:

Instead of keeping track of which gestures to stop during the next commit,
we instead track on the pending gesture whether that gesture should commit
that lane next time we get there in the React commit sequence.
When completing a root we can apply the gesture which starts the animation
but it's not committed. We mark the lane as suspended at that point.
This will rerender the gesture lane and then commit it which stops the
gesture. After that any Transitions can be applied on top.
…commits

This part doesn't animate until we release.
@meta-cla meta-cla bot added the CLA Signed label Jan 12, 2026
@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label Jan 12, 2026
@react-sizebot
Copy link

react-sizebot commented Jan 12, 2026

Comparing: 5aec1b2...155adb4

Critical size changes

Includes critical production bundles, as well as any change greater than 2%:

Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable/react-dom/cjs/react-dom.production.js = 6.84 kB 6.84 kB +0.11% 1.88 kB 1.88 kB
oss-stable/react-dom/cjs/react-dom-client.production.js +0.05% 607.60 kB 607.88 kB +0.05% 107.53 kB 107.59 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.84 kB 6.84 kB +0.05% 1.88 kB 1.88 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js +0.32% 666.83 kB 668.95 kB +0.35% 117.42 kB 117.82 kB
facebook-www/ReactDOM-prod.classic.js +0.04% 692.91 kB 693.21 kB +0.04% 121.92 kB 121.97 kB
facebook-www/ReactDOM-prod.modern.js +0.04% 683.34 kB 683.63 kB +0.04% 120.31 kB 120.36 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
oss-experimental/react-reconciler/cjs/react-reconciler.production.js +0.34% 488.22 kB 489.86 kB +0.40% 77.61 kB 77.92 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js +0.32% 666.83 kB 668.95 kB +0.35% 117.42 kB 117.82 kB
oss-experimental/react-dom/cjs/react-dom-unstable_testing.production.js +0.31% 681.24 kB 683.36 kB +0.33% 120.97 kB 121.37 kB
oss-experimental/react-dom/cjs/react-dom-profiling.profiling.js +0.29% 745.45 kB 747.61 kB +0.36% 128.73 kB 129.19 kB
oss-experimental/react-reconciler/cjs/react-reconciler.profiling.js +0.29% 563.67 kB 565.28 kB +0.45% 87.62 kB 88.02 kB
oss-experimental/react-reconciler/cjs/react-reconciler.development.js +0.24% 857.38 kB 859.47 kB +0.34% 133.40 kB 133.85 kB
oss-experimental/react-art/cjs/react-art.development.js +0.24% 729.62 kB 731.38 kB +0.44% 114.59 kB 115.09 kB
oss-experimental/react-dom/cjs/react-dom-client.development.js +0.21% 1,240.60 kB 1,243.26 kB +0.28% 205.92 kB 206.50 kB
oss-experimental/react-dom/cjs/react-dom-unstable_testing.development.js +0.21% 1,257.14 kB 1,259.80 kB +0.27% 209.62 kB 210.19 kB
oss-experimental/react-dom/cjs/react-dom-profiling.development.js +0.21% 1,257.14 kB 1,259.81 kB +0.28% 208.79 kB 209.38 kB
oss-experimental/react-art/cjs/react-art.production.js = 357.36 kB 356.47 kB = 60.19 kB 60.14 kB

Generated by 🚫 dangerJS against 155adb4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed React Core Team Opened by a member of the React Core Team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants