{"record":{"id":"3947d7ea234b6c40","repo":"facebook/react","slug":"544-3947d7","errorCode":"544","errorMessage":"Found a pair with an auto name. This is a bug in React.","messagePattern":"Found a pair with an auto name\\. This is a bug in React\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/react-reconciler/src/ReactFiberCommitViewTransitions.js","lineNumber":295,"sourceCode":"  if ((placement.subtreeFlags & ViewTransitionNamedStatic) === NoFlags) {\n    // This has no named view transitions in its subtree.\n    return;\n  }\n  let child = placement.child;\n  while (child !== null) {\n    if (child.tag === OffscreenComponent && child.memoizedState !== null) {\n      // This tree was already hidden so we skip it.\n    } else {\n      commitAppearingPairViewTransitions(child);\n      if (\n        child.tag === ViewTransitionComponent &&\n        (child.flags & ViewTransitionNamedStatic) !== NoFlags\n      ) {\n        const instance: ViewTransitionState = child.stateNode;\n        if (instance.paired) {\n          const props: ViewTransitionProps = child.memoizedProps;\n          if (props.name == null || props.name === 'auto') {\n            throw new Error(\n              'Found a pair with an auto name. This is a bug in React.',\n            );\n          }\n          const name = props.name;\n          const className: ?string = getViewTransitionClassName(\n            props.default,\n            props.share,\n          );\n          if (className !== 'none') {\n            // We found a new appearing view transition with the same name as this deletion.\n            // We'll transition between them.\n            const inViewport = applyViewTransitionToHostInstances(\n              child,\n              name,\n              className,\n              null,\n              false,\n            );","sourceCodeStart":277,"sourceCodeEnd":313,"githubUrl":"https://github.com/facebook/react/blob/eafeac097ba51e1eab809c07102126bd5f8e5425/packages/react-reconciler/src/ReactFiberCommitViewTransitions.js#L277-L313","documentation":"During View Transition pairing, commitAppearingPairViewTransitions() walks a newly placed subtree looking for <ViewTransition> boundaries flagged (ViewTransitionNamedStatic) as paired with a deleted boundary of the same name. A paired boundary must carry an explicit name; auto-named boundaries never qualify for pairing. Finding instance.paired with name null or 'auto' means the pairing pass marked a boundary that the naming pass did not.","triggerScenarios":"Rendering experimental <ViewTransition> components where an enter animation must pair with an exit of the same name, under a canary build whose pairing algorithm is inconsistent; updates that delete and re-insert named view-transition subtrees in a single commit.","commonSituations":"Prototyping with the experimental ViewTransition API (canary/experimental channel); lists whose items enter and leave in one update; gesture transitions layered on top of ViewTransition.","solutions":["Update the experimental/canary build - ViewTransition pairing logic changes frequently","Give boundaries that enter/exit stable explicit names instead of the default auto name","Avoid deleting and re-adding the same-named boundary in one update; key it and update in place","File an issue with the enter/exit repro if it persists on the latest experimental build"],"exampleFix":"// before - default (auto) name on a boundary that pairs\n<ViewTransition>{item && <Row id={1} />}</ViewTransition>\n\n// after - stable explicit name for boundaries that enter/exit\n<ViewTransition name=\"row-1\">{item && <Row id={1} />}</ViewTransition>","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"Commit-phase invariant: not catchable by ErrorBoundaries. Capture via onUncaughtError including the names of the ViewTransition boundaries involved, report to the experimental channel thread or issue tracker, and remount.","preventionTips":["Use explicit stable names on ViewTransition boundaries that enter or exit","Treat ViewTransition as experimental - pin the exact canary version you tested","Avoid deleting and re-adding the same-named boundary in one commit; update it in place instead"],"tags":["view-transitions","experimental","commit-phase","invariant"],"backgroundTag":"view-transition-invariant","analyzedSha":"eafeac097ba51e1eab809c07102126bd5f8e5425","analyzedAt":"2026-08-21T22:01:08.818Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}