This document catalogs 50 edge cases that may occur when using the React Debugger Chrome Extension. Each case includes the scenario, expected behavior, and potential failure modes.
- Scenario: User opens DevTools on a page without React
- Expected Behavior: Extension shows "React not detected" message, no errors in console
- Potential Failure: Extension attempts to traverse non-existent fiber tree, causing errors
- Scenario: React bundle is loaded dynamically after initial page load
- Expected Behavior: Extension detects React when it becomes available
- Potential Failure: Detection polling may have stopped before React loads
- Scenario: Page has React 17 and React 18 loaded simultaneously (micro-frontends)
- Expected Behavior: Extension detects primary React version, shows warning about multiple versions
- Potential Failure: Fiber tree traversal may mix nodes from different React versions
- Scenario: React app runs inside an iframe
- Expected Behavior: Extension detects React in main frame only (by design)
- Potential Failure: Content script may inject into iframe, causing duplicate detection
- Scenario: Extension is updated/reloaded while DevTools is open
- Expected Behavior: Extension gracefully handles context invalidation, shows reconnect message
- Potential Failure: Zombie event listeners continue running, causing console errors
- Scenario: User opens DevTools immediately on page load, before React initializes
- Expected Behavior: Extension waits for React, then initializes properly
- Potential Failure: Race condition between detection and panel initialization
- Scenario: App uses react-three-fiber or react-native-web with custom reconciler
- Expected Behavior: Extension detects React but may not fully understand custom fiber types
- Potential Failure: Fiber traversal crashes on unknown fiber tags
- Scenario: Next.js/Remix app hydrates server-rendered HTML
- Expected Behavior: Extension detects React after hydration completes
- Potential Failure: Extension may capture hydration mismatches as errors
- Scenario: App runs in React.StrictMode (development)
- Expected Behavior: Extension correctly identifies double renders as intentional
- Potential Failure: Reports excessive re-renders for normal Strict Mode behavior
- Scenario: User debugs production build of React app
- Expected Behavior: Extension works but with limited component names (minified)
- Potential Failure: Component names show as single letters, making debugging difficult
- Scenario: App has requestAnimationFrame-driven state updates
- Expected Behavior: Extension throttles analysis to prevent blocking animation
- Potential Failure: Extension analysis causes frame drops
- Scenario: Complex dashboard with hundreds of components
- Expected Behavior: Extension limits traversal depth, shows partial tree
- Potential Failure: Full traversal blocks main thread for seconds
- Scenario: Recursive component structure (tree view, nested comments)
- Expected Behavior: Extension caps traversal at max depth
- Potential Failure: Stack overflow from recursive traversal
- Scenario: Virtualized list renders 10,000 items
- Expected Behavior: Extension samples children, doesn't enumerate all
- Potential Failure: Memory exhaustion from tracking all children
- Scenario: Theme context or auth context updates frequently
- Expected Behavior: Extension tracks context changes without excessive overhead
- Potential Failure: Every context consumer triggers analysis
- Scenario: App uses React 18 concurrent features
- Expected Behavior: Extension handles interrupted renders gracefully
- Potential Failure: Partial render states cause inconsistent analysis
- Scenario: Browser is low on memory while extension is active
- Expected Behavior: Extension reduces data collection, warns user
- Potential Failure: Extension contributes to out-of-memory crash
- Scenario: Developer leaves DevTools open all day
- Expected Behavior: Extension maintains stable memory usage
- Potential Failure: Memory leaks cause gradual performance degradation
- Scenario: User switches to another tab while extension is active
- Expected Behavior: Extension pauses heavy operations when tab is hidden
- Potential Failure: Background tab continues consuming resources
- Scenario: User opens DevTools in multiple windows for same tab
- Expected Behavior: Both panels receive same data
- Potential Failure: Duplicate message processing, race conditions
- Scenario: App has Redux but no DevTools extension integration
- Expected Behavior: Extension detects store via window property scanning
- Potential Failure: Store detection fails, Redux tab shows empty
- Scenario: Micro-frontend with separate Redux stores per module
- Expected Behavior: Extension detects primary store, notes multiple stores exist
- Potential Failure: Extension tracks wrong store or mixes state
- Scenario: Hot module replacement replaces Redux store
- Expected Behavior: Extension detects new store, updates connection
- Potential Failure: Extension holds reference to old store
- Scenario: App uses redux-saga or custom middleware
- Expected Behavior: Extension shows actions as dispatched (post-middleware)
- Potential Failure: Action timeline shows confusing middleware-generated actions
- Scenario: App stores large datasets in Redux
- Expected Behavior: Extension truncates state display, warns about size
- Potential Failure: Serializing large state blocks main thread
- Scenario: Redux state contains circular object references
- Expected Behavior: Extension detects and handles circular refs
- Potential Failure: JSON serialization throws, crashes state display
- Scenario: State contains functions, Symbols, or class instances
- Expected Behavior: Extension sanitizes values, shows placeholders
- Potential Failure: Serialization errors or misleading display
- Scenario: App uses RTK with Immer for immutable updates
- Expected Behavior: Extension shows final state, not Immer drafts
- Potential Failure: Extension captures Immer proxy objects
- Scenario: Component unmounts while extension is analyzing its fiber
- Expected Behavior: Extension handles stale fiber reference gracefully
- Potential Failure: Accessing unmounted fiber causes errors
- Scenario: User navigates to new route in single-page app
- Expected Behavior: Extension clears old route data, starts fresh analysis
- Potential Failure: Old route's issues persist in new route's display
- Scenario: User refreshes page with F5
- Expected Behavior: Extension reinitializes cleanly
- Potential Failure: Old state persists in background script
- Scenario: User closes tab with DevTools open
- Expected Behavior: All tab-specific data is cleaned up
- Potential Failure: Memory leak in background script Maps
- Scenario: User toggles extension off and on in chrome://extensions
- Expected Behavior: Extension reinitializes without residual state
- Potential Failure: Stale listeners or state from previous session
- Scenario: Browser crashes and restores session
- Expected Behavior: Extension starts fresh on restored tabs
- Potential Failure: Extension tries to resume invalid state
- Scenario: User closes DevTools panel then reopens it
- Expected Behavior: Extension reconnects, shows current state
- Potential Failure: Panel shows stale data from before close
- Scenario: Extension takes memory snapshot while GC is running
- Expected Behavior: Snapshot reflects post-GC state
- Potential Failure: Inconsistent memory readings
- Scenario: React list has items with same key prop
- Expected Behavior: Extension detects and reports duplicate key warning
- Potential Failure: Only first duplicate is reported
- Scenario: List uses array index as key, items are reordered
- Expected Behavior: Extension warns about index-as-key anti-pattern
- Potential Failure: False positive for static lists where index is acceptable
- Scenario: Component mutates state object directly instead of using setState
- Expected Behavior: Extension detects mutation pattern, warns user
- Potential Failure: Mutation detection has false negatives for deep mutations
- Scenario: useEffect sets up subscription without cleanup function
- Expected Behavior: Extension warns about potential memory leak
- Potential Failure: False positive for effects that don't need cleanup
- Scenario: useEffect references variables not in dependency array
- Expected Behavior: Extension warns about stale closure risk
- Potential Failure: Cannot detect all closure issues statically
- Scenario: Props passed through 10+ component levels
- Expected Behavior: Extension suggests using Context
- Potential Failure: Legitimate prop passing flagged as issue
- Scenario: Component receives props with 100+ properties
- Expected Behavior: Extension truncates display, warns about prop size
- Potential Failure: Serializing large props causes lag
- Scenario: Images load without width/height, causing layout shift
- Expected Behavior: Extension captures CLS event, identifies image as source
- Potential Failure: Source element identification fails for dynamic content
- Scenario: Web font loads and changes text dimensions
- Expected Behavior: Extension captures font-induced CLS
- Potential Failure: Font shifts may be too small to attribute
- Scenario: Ad or third-party widget injects content, shifting layout
- Expected Behavior: Extension identifies injected element as CLS source
- Potential Failure: Cross-origin content may not be attributable
- Scenario: App uses skeleton screens that transition to real content
- Expected Behavior: Extension distinguishes intentional transitions from problematic shifts
- Potential Failure: Skeleton-to-content transition flagged as CLS issue
- Scenario: User resizes browser window
- Expected Behavior: Extension ignores user-initiated layout changes
- Potential Failure: Resize-triggered shifts counted as CLS
- Scenario: Elements animate into view on scroll
- Expected Behavior: Extension filters out scroll-triggered shifts (hadRecentInput)
- Potential Failure: Scroll animations incorrectly flagged
- Scenario: User triggers print dialog, causing layout recalculation
- Expected Behavior: Extension ignores print-related layout changes
- Potential Failure: Print layout shifts recorded as CLS
| Category | Count | Key Concerns |
|---|---|---|
| Initialization & Detection | 10 | Race conditions, multiple React versions, SSR |
| Performance Monitoring | 10 | Large trees, rapid updates, memory pressure |
| Redux Integration | 8 | Store detection, large state, HMR |
| Memory & Cleanup | 8 | Navigation, tab lifecycle, leak prevention |
| UI & State Issues | 7 | False positives, detection accuracy |
| CLS & Layout | 7 | Attribution accuracy, intentional shifts |
| Total | 50 |
For each edge case:
- Create a minimal reproduction scenario
- Verify expected behavior in Chrome DevTools
- Check console for errors
- Monitor memory usage over time
- Test on both development and production React builds