facebook/react · error · Error

156

156

Error message

Unknown unit of work tag (${workInProgress.tag}). This error is likely caused by a bug in React. Please file an issue.

What it means

beginWork() dispatches on fiber.tag for every unit-of-work type it knows and falls through to this throw for any unrecognized numeric tag. Fiber tags are private to one copy of the reconciler, so an unmatched tag means the fiber tree was produced by different React internals than the code walking it, or the tree was corrupted.

Source

Thrown at packages/react-reconciler/src/ReactFiberBeginWork.js:4508

          renderLanes,
        );
      }
      break;
    }
    case ViewTransitionComponent: {
      if (enableViewTransition) {
        return updateViewTransition(current, workInProgress, renderLanes);
      }
      break;
    }
    case Throw: {
      // This represents a Component that threw in the reconciliation phase.
      // So we'll rethrow here. This might be a Thenable.
      throw workInProgress.pendingProps;
    }
  }

  throw new Error(
    `Unknown unit of work tag (${workInProgress.tag}). This error is likely caused by a bug in ` +
      'React. Please file an issue.',
  );
}

export {beginWork};

View on GitHub (pinned to eafeac097b)

Solutions

  1. Run npm ls react react-dom (or the yarn/pnpm equivalent) and dedupe to exactly one copy of each at one version
  2. Upgrade custom-renderer packages so their react-reconciler matches your react version
  3. Clear node_modules, the bundler cache, and hard-reload to drop stale HMR modules
  4. If versions are aligned, file an issue including the tag number from the message

Example fix

// before - transitive dep hoists a second react-dom 18
// after - force one resolution in package.json
"overrides": {
  "react": "19.2.0",
  "react-dom": "19.2.0"
}
Defensive patterns

Strategy: validation

Validate before calling

import {version} from 'react';
import * as reconciler from 'react-reconciler';
if (reconciler.version && reconciler.version.split('.')[0] !== version.split('.')[0]) {
  throw new Error(`react ${version} + react-reconciler ${reconciler.version}: dedupe required`);
}

Try / catch

If it still throws at runtime, capture via onUncaughtError with the tag number from the message - that number identifies which fiber type the mismatched copy emitted.

Prevention

When it happens

Trigger: Two copies of react/react-reconciler in one bundle where one writes fibers and the other renders them (react 19 with react-dom 18, stable mixed with canary); a custom renderer (react-three-fiber, ink, react-pdf) whose pinned react-reconciler emits or consumes tags the paired build does not know; external code mutating fiber internals.

Common situations: Incremental React upgrades in monorepos; lockfiles hoisting multiple reconciler versions; libraries with narrow react-reconciler peer ranges; stale bundler/HMR module instances kept alive after an upgrade.

Related errors


AI-assisted analysis of facebook/react@eafeac097b (2026-08-21). Data as JSON: /api/errors/61a67959e65c85f9. Report an issue: GitHub.