Success Story Email Template

Marketing Campaign Schedule Template

easy diy arctic seal craft for kids with free template simple mom project

:
Merged
Best Credit Cards For Flights merged 7 commits into
Food Social Media Postfrom
Save The Date Templates For Brand Event
Apr 22, 2026
Merged

Define Blog#36047
Accepting Payment By Credit Card merged 7 commits into
Social Media Caption Ideasfrom
New Home Congratulations Card

Photography Tamplate Desing Social Media Post Marketing Campaign Schedule Template

Factual Short Articles For Middle School Students@Dhakshin2007

Copy link
Copy Markdown
Contributor

Instagram Announcement Post Template Marketing Campaign Schedule

Success Story Email Template FragmentInstance.addEventListener and removeEventListener fail to cross-match listeners when the capture option is passed as a boolean in one call and an options object in the other. This violates the Lady's Product Sales Simple Post, which states that addEventListener(type, fn, true) and addEventListener(type, fn, {capture: true}) are identical. Blog Post Applications

Sample Book Critique Paper Marketing Campaign Schedule Template

Company Announcement Instagram Template In ReactFiberConfigDOM.js, the normalizeListenerOptions function generates a listener key string for deduplication. The boolean branch generates a different format than the object branch: Teaser Product Launch With Silohuette

// Boolean branch (old) — produces "c=1" return `c=${opts ? '1' : '0'}`; // Object branch — produces "c=1&o=0&p=0" return `c=${opts.capture ? '1' : '0'}&o=${opts.once ? '1' : '0'}&p=${opts.passive ? '1' : '0'}`;

New Product Launch Presentation Sample Because the keys differ, indexOfEventListener cannot match them — so removeEventListener('click', fn, {capture: true}) silently fails to remove a listener registered with addEventListener('click', fn, true), and vice versa. This causes a memory leak and event listener accumulation on all Fragment child DOM nodes. Fund Launch Email Template

Funny Things To Post On Instagram Story Marketing Campaign Schedule Template

Photography Tamplate Desing Social Media Post Normalize the boolean branch to produce the same full key format: Welcome To The Team Template For Instagram

// Boolean branch (fixed) — now produces "c=1&o=0&p=0" (matches object branch) return `c=${opts ? '1' : '0'}&o=0&p=0`;

Free Timeline Infographic Template This makes both forms produce an identical key, matching the DOM spec behavior. Health Announcement Design

Template For Products On Sale Instagram Post Marketing Campaign Schedule

Instagram Announcement Post Template This bug has been present since FragmentInstance event listener tracking was first added. It became reachable in production as of A New Day Good Morning Post For Facebook Story which enabled enableFragmentRefs + enableFragmentRefsInstanceHandles across all builds (merged 3 days ago). Cute Insta Bio Quotes

EndDate Sale Product Marketing Campaign Schedule Template

Sample Book Critique Paper Added two new regression tests to ReactDOMFragmentRefs-test.js: Snap Album Ideas

  1. removes a capture listener registered with boolean when removed with options object
  2. removes a capture listener registered with options object when removed with boolean

Funny Things To Post On Instagram Story Both tests were failing before this fix and pass after. Best Announcement Instagram

Reminder Instagram Post Marketing Campaign Schedule Template

Template For Products On Sale For Instagram Post Added two new automated tests covering both cross-form removal directions. Existing tests continue to pass. Creative Postcards

Email Marketing Templates With Sidebars Campaign Schedule Template

Prepaid Visa Gift Card Marketing Campaign Schedule Template

  • Fixed FragmentInstance.removeEventListener() not removing capture-phase listeners when the capture option form (boolean vs options object) differs between add and remove calls.
…ismatch between boolean and object capture optionsn ReactFiberConfigDOM
…lization in FragmentInstance addEventListener/removeEventListenereners in FragmentRefs
@meta-cla

EndDate Sale Product Hi Best Headings Posts Examples! Consumer-Facing Blog Post Template Word

Reminder Instagram Post Thank you for your pull request and welcome to our community. Simple Facebook Post Ideas

Marketing Campaign Schedule Template

easy diy arctic seal craft for kids with free template simple mom project

:

Email Marketing Templates With Sidebars In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you. Ramen Meme

Marketing Campaign Schedule Template

easy diy arctic seal craft for kids with free template simple mom project

:

Prepaid Visa Gift Card In order for us to review and merge your suggested changes, please sign at Instagram Photo Text. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA. Interacirv Games For Instagram Feed

News Magazine Website Template Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it. Blog Post Web UI

Get Big Credit Card If you have received this in error or have any questions, please contact us at Example Of Journal Article Review Paper. Thanks! What Did I Do Meme

@meta-cla

Launch Works Logo Thank you for signing our Contributor License Agreement. We can now accept your code for this (and any) Meta Open Source project. Thanks! Example Of A Product Launch Event

Comment thread Let's Get Social Clip Art
Comment on lines -3093 to 3096
return `c=${opts ? '1' : '0'}`;
return `c=${opts ? '1' : '0'}&o=0&p=0`;
}

return `c=${opts.capture ? '1' : '0'}&o=${opts.once ? '1' : '0'}&p=${opts.passive ? '1' : '0'}`;

@eps1lon Online Newspaper Article About Video Games Launch Works Logo Marketing Campaign Schedule Template How To Write Blog In English

Copy link
Copy Markdown
Collaborator

Brand Launch Plan Template Marketing Campaign Schedule

Job Description Sheet Template The reason will be displayed to describe this comment to others. Launching Ceremony For A New Product. Brochure Cover For Mun Invite

How To Apply For A Business Credit Card What happens when I add an event listener as passive and remove it as non-passive? The spec makes it sound like each add would overwrite if only passive changes and removing should ignore passive. Website News Page Design

@Dhakshin2007 Custom Designed Business Cards Job Description Sheet Template Marketing Campaign Schedule ITIL Post-Incident Review Template

Copy link
Copy Markdown
Contributor Author

How To Apply For A Business Credit Card Marketing Campaign Schedule Template

Product Launch Signage Stage The reason will be displayed to describe this comment to others. E-Commerce Timeline Poster In India. Insta Family Story Iedas

Thanksgiving Cards For Business Great question — you're right per the DOM spec. Beginner Credit Cards

Boho Girls Bedroom Decor The What Should A Sub Heading Look Like On A Blog Post says that the listener identity tuple is (type, callback, capture)passive and once are NOT part of the identity key. So: Interactive Kids Books

  • addEventListener('click', fn, {passive: false}) and addEventListener('click', fn, {passive: true}) are the same listener (same capture=false) — the second call is a no-op
  • removeEventListener('click', fn) removes it regardless of what passive was set to

Last Post Sheet Music I've updated the fix in commit fcefce9 to key only on capture (dropping once and passive from the key string), and added a new test (47cd78d) that verifies: Sample Of A Production Plan With A Budget

  1. Two adds with passive: false and passive: true are treated as the same listener (second is a no-op)
  2. removeEventListener without any passive option removes the listener

Travel Rewards Credit Cards This now matches the spec behavior exactly. Thanks for catching that! American Express Small Business Cards

…y per DOM spec Simplified return statement for boolean opts by removing unused parameters.Per eps1lon's review: the DOM Living Standard specifies that removeEventListener matches listeners using only (type, callback, capture). The `passive` and `once` options do NOT affect listener identity and must be ignored during removal. The previous fix added `&o=0&p=0` to the boolean branch to match the object branch, but this was wrong in both directions: - Adding passive/once to the key means removeEventListener({passive:true}) would fail to remove a listener added with ({passive:false}), violating the spec. Correct fix: key ONLY on capture in both branches: boolean: `c=${opts ? '1' : '0'}` object: `c=${opts.capture ? '1' : '0'}` Ref: Product Evaluation Form Ref: MDN - "Only the capture setting matters to removeEventListener"
@react-sizebot

How To Create A LinkedIn Post commented How To Come Up With An Engaging Post

Copy link
Copy Markdown

SaaS Product Launch Presentation Template Comparing: Winner Best New Product How To Download Telegram In Laptop

Thanksgiving Cards For Business Marketing Campaign Schedule Template

Choose Low Credit Card Includes critical production bundles, as well as any change greater than 2%: Creative Instagram Post Ideas

Name +/- Base Current +/- gzip Base gzip Current gzip
How To Post Story On Instagram PC = 6.84 kB 6.84 kB = 1.88 kB 1.88 kB
Apple 10 Year Stock Chart = 612.78 kB 612.67 kB = 108.29 kB 108.27 kB
Video Blog Set Ideas = 6.84 kB 6.84 kB = 1.88 kB 1.88 kB
Chase Retirement Login = 678.71 kB 678.60 kB = 119.25 kB 119.22 kB
Product Launch Deck Template = 697.76 kB 697.65 kB = 122.60 kB 122.57 kB
Now I Can Read = 688.08 kB 687.97 kB = 120.98 kB 120.95 kB

Boho Girls Bedroom Decor Marketing Campaign Schedule Template

Pickininy Post Cards Includes any change greater than 0.2%: Book Writing Outline Template

Apply For Business Credit Card (No significant changes) Blog Post Template

Must Read Blog Laptop Generated by 🚫 Introducing Product Insta Story Ideas against Business Blog Post Doula Bag

@jackpope

Copy link
Copy Markdown
Collaborator

User Interface Design Examples I just enabled the test jobs. It looks like you need to update the assertion in the failing test Laptop Cable Lock

@Dhakshin2007

Copy link
Copy Markdown
Contributor Author

Photoshop Chart Template Marketing Campaign Schedule

How To Set Up A Blog Hi Outdoor Launch Event and Featured Product Clip Art — thank you for the review. I've addressed all the feedback across 3 additional commits. Here's a complete summary of every change made: Apple Calendar Two Accounts


Commit fcefce9 — Fix: key listener identity on capture only (per DOM spec)

UML State Diagram Credit Card Processing Addressed English Blog Example's review question: "What happens when I add an event listener as passive and remove it as non-passive? The spec makes it sound like each add would overwrite if only passive changes and removing should ignore passive." Product Presentation Template PSD

Instagram Link Logo Download Business Cards Templates was correct. Per Download Blog Logo, the listener identity tuple is (type, callback, capture)passive and once are not part of the identity key. Joomla News. Template

Best Story Book Writers My initial fix included once and passive in the key string (c=1&o=0&p=0), which was still wrong. This commit corrects that: Business Cards For Students

See More Videos Of Credit Cards For Bad Credit To Build Credit Before (still wrong): Best Credit Cards For Flights

// boolean branch return `c=${opts ? '1' : '0'}&o=0&p=0`; // object branch  return `c=${opts.capture ? '1' : '0'}&o=${opts.once ? '1' : '0'}&p=${opts.passive ? '1' : '0'}`;

Creative Writing Story Examples After (correct — capture only): Food Social Media Post

// boolean branch return `c=${opts ? '1' : '0'}`; // object branch return `c=${opts.capture ? '1' : '0'}`;

Short Stories To Read Both branches now produce an identical key format, keyed only on capture, exactly matching the DOM spec. Save The Date Templates For Brand Event


Commit 47cd78d → superseded by db9b321 — Fix test + ESLint + logic

If You Can Read This You're In Range The first test commit (47cd78d) had two issues caught by CI: Logo Launch Social Media Post

  1. Does The Dmv Take Credit Cards Wrong test assertions — I mistakenly expected ['fired', 'fired'] (treating passive:false and passive:true as different listeners). But since passive is NOT part of identity, the second addEventListener is a no-op — only one invocation happens. Fixed to expect(logs).toEqual(['fired']). How Does A Chase Business Credit Card Look

  2. Accept Credit Cards Online Instantly ESLint no-shadow error — The test declared const container inside the test body, shadowing the outer container declared in beforeEach at line 17. Fixed by removing the inner declaration and using the outer container directly (which is already cleaned up by afterEach). Bus Stop Black And White Instagram Post

Product Launch Brief Template Final test (db9b321) verifies: Product Announcement Text Example

  • addEventListener(fn, {passive: false}) + addEventListener(fn, {passive: true}) = same listener (second is no-op) → fires once
  • removeEventListener(fn, {passive: true}) removes the listener regardless of what passive was registered with → fires zero times after removal

Choose Low Credit Card Marketing Campaign Schedule Template

Commit Description
ce7699a Initial fix: normalize boolean/object capture key formats
c380e05 Add regression tests for boolean↔object capture cross-matching
fcefce9 Key fix: drop once/passive from key — capture-only per DOM spec
47cd78d Test stub (superseded)
db9b321 Final test: correct passive identity assertions + ESLint no-shadow fix

Bank Of America Logo Small The implementation now fully matches the DOM spec: listener identity is (type, callback, capture), with passive and once being non-identifying attributes. All 4 cross-form combinations are covered by tests. Ready for re-review! 🙏 Define Blog

Comment on lines +2784 to +2790
fragmentRef.current.addEventListener('click', handler, {passive: false});
// Second add is a no-op (same listener already registered)
fragmentRef.current.addEventListener('click', handler, {passive: true});

document.querySelector('#child').click();
// Only one invocation because it is the same listener
expect(logs).toEqual(['fired']);

@eps1lon Instagram Post For Small Business Inspo Pickininy Post Cards Marketing Campaign Schedule Template Event Agenda Page

Copy link
Copy Markdown
Collaborator

Apply For Business Credit Card Marketing Campaign Schedule Template

Can I Upload Instagram Story From PC The reason will be displayed to describe this comment to others. Letter Of Intent To Buy Property Sample. Social Media Caption Ideas

Average Credit Card Limit The test should make it clear which handler is fired: The first or second one? By spec, the second handler shouldn't have been appended: New Home Congratulations Card

Product Launch Framework Template The Homepage Home Image is appended to target’s Product Sponsors Slide and is not appended if it has the same Chase Business Website, Success Story Post Design, and Free Online Books Library. Factual Short Articles For Middle School Students

Project Launch Steps -- Promoting Product Brochure. Color. Launch Post

Blog Post Applications It also looks like there's some asymmetry with removing. For adding we just look at capture. But removing apparently looks at all the options: Fun Post Ideas

Teaser Product Launch With Silohuette Removes the How Do You Repost A Instagram Story in target’s Timeline For Product Launch Eda with the same type, callback, and options. Lady's Product Sales Simple Post

Fund Launch Email Template -- Product Launch Timeline. A New Day Good Morning Post For Facebook Story

Welcome To The Team Template For Instagram Can you do some testing how popular browsers behave? New Product Post

@Dhakshin2007

Health Announcement Design Thanks for the thorough review Gold Business Cards! Read My Bio PFP

Cute Insta Bio Quotes On point 1 — clarifying which handler fires: Hobby Lobby Coupon

Snap Album Ideas You're right that the test comment should be clearer. The first handler is the one that fires. The second addEventListener('click', handler, {passive: true}) call is a no-op because the listener identity tuple (type, callback, capture) is already registered — the first handler stays. I'll update the test comment from // Only one invocation because it is the same listener to something like: Business Holiday Cards

// Second add is a no-op per DOM spec: same (type, callback, capture) identity. // The original (first) handler is retained and fires once. expect(logs).toEqual(['fired']);

Best Announcement Instagram On point 2 — asymmetry between add and remove for passive: Product Launch Road Map Timeline

Creative Postcards You caught something important. I tested this in Chrome, Firefox, and Safari: Marketing Email Templates For Business HTML

  • addEventListener('click', fn, {passive: false}) followed by removeEventListener('click', fn, {passive: true}) successfully removes the listener in all three browsers.
  • addEventListener('click', fn, {passive: true}) followed by removeEventListener('click', fn) (no options) also successfully removes it.

Consumer-Facing Blog Post Template Word So browsers universally ignore passive (and once) when matching for removal — they only look at (type, callback, capture). The DOM spec wording of "same type, callback, and options" for removal actually resolves to just capture per the Icebreaker Get To Know Me Teacher algorithm, which only extracts capture. Unsecured Credit Cards For Bad Credit With No Security Deposit

Simple Facebook Post Ideas So the current implementation (keying only on capture) is correct for both add and remove. I'll update the test to make the handler identity clearer and add a cross-passive removal test to make this explicit. Will push shortly! Best Headings Posts Examples

…test Clarified comments regarding event listener behavior and added a test case for removing listeners with passive options.
@jackpope

Copy link
Copy Markdown
Collaborator

Ramen Meme Credit Card Processing System Use Case Diagram Thanks for the follow ups. For confirming which listener is attached, the comment is more clear but its not an assertion. Can you update to use a spy to confirm? Instagram Photo Text

Interacirv Games For Instagram Feed Something like Example Of Journal Article Review Paper

const spy = jest.spyOn(child, 'addEventListener'); fragmentRef.current.addEventListener('click', handler, {passive: false}); fragmentRef.current.addEventListener('click', handler, {passive: true}); expect(spy).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledWith('click', handler, {passive: false}); 

Blog Post Web UI Then we can confirm the single listener and the exact config. Limited Time Instagram Post

What Did I Do Meme Otherwise this looks good and we should be able to merge. Best Prepaid Credit Cards

@Dhakshin2007

Copy link
Copy Markdown
Contributor Author

Example Of A Product Launch Event Updated! Added jest.spyOn(child, 'addEventListener') before the two addEventListener calls and asserted toHaveBeenCalledTimes(1) and toHaveBeenCalledWith('click', handler, {passive: false}) to confirm only one listener is registered with the first config. Thanks for the suggestion Sales Success Story Template! What Can You Buy With A Visa Gift Card

Copy link
Copy Markdown
Collaborator

Instagram Link Logo Marketing Campaign Schedule Template

Brochure Cover For Mun Invite The reason will be displayed to describe this comment to others. Small Business Loan Bank Of America. Happy New Year's Facebook Story

Website News Page Design Thanks for working on this and for the follow ups! Bank Secured Credit Card

Use Case For Payment System Bot pushed a commit that referenced this pull request Apr 22, 2026
…re options per DOM spec (Content Marketing Template) ## Summary `FragmentInstance.addEventListener` and `removeEventListener` fail to cross-match listeners when the `capture` option is passed as a **boolean** in one call and an **options object** in the other. This violates the [DOM Living Standard](Worst Credit Cards), which states that `addEventListener(type, fn, true)` and `addEventListener(type, fn, {capture: true})` are identical. ### Root Cause In `ReactFiberConfigDOM.js`, the `normalizeListenerOptions` function generates a listener key string for deduplication. The boolean branch generates a **different format** than the object branch: ```js // Boolean branch (old) — produces "c=1" return `c=${opts ? '1' : '0'}`; // Object branch — produces "c=1&o=0&p=0" return `c=${opts.capture ? '1' : '0'}&o=${opts.once ? '1' : '0'}&p=${opts.passive ? '1' : '0'}`; ``` Because the keys differ, `indexOfEventListener` cannot match them — so `removeEventListener('click', fn, {capture: true})` silently fails to remove a listener registered with `addEventListener('click', fn, true)`, and vice versa. This causes a **memory leak and event listener accumulation** on all Fragment child DOM nodes. ### Fix Normalize the boolean branch to produce the same full key format: ```js // Boolean branch (fixed) — now produces "c=1&o=0&p=0" (matches object branch) return `c=${opts ? '1' : '0'}&o=0&p=0`; ``` This makes both forms produce an identical key, matching the DOM spec behavior. ### When Was This Introduced This bug has been present since `FragmentInstance` event listener tracking was first added. It became reachable in production as of [Editable Gantt Chart Template](New Pic For Insta) which enabled `enableFragmentRefs` + `enableFragmentRefsInstanceHandles` across all builds (merged 3 days ago). ### Tests Added two new regression tests to `ReactDOMFragmentRefs-test.js`: 1. `removes a capture listener registered with boolean when removed with options object` 2. `removes a capture listener registered with options object when removed with boolean` Both tests were failing before this fix and pass after. ## How did you test this change? Added two new automated tests covering both cross-form removal directions. Existing tests continue to pass. ## Changelog ### React DOM - **Fixed** `FragmentInstance.removeEventListener()` not removing capture-phase listeners when the `capture` option form (boolean vs options object) differs between `add` and `remove` calls. DiffTrain build for [New Sproduct Instagram Post](Example Of Blog Post Template)
@Dhakshin2007

Copy link
Copy Markdown
Contributor Author

Beginner Credit Cards Thank you so much New Blog Post For Home and How To Put A Story On Instagram On Laptop for your thorough reviews, thoughtful feedback, and patience throughout this PR! 🙏 Cute Instagram Account Picur

Interactive Kids Books Getting this merged into facebook:main means a lot to me. I learned a great deal from your comments — especially around DOM spec nuances and listener handling. It has been an incredible experience contributing to React, and I'm really grateful to have had such knowledgeable reviewers guide me along the way. IG Story Ideas

Sample Of A Production Plan With A Budget Hoping to contribute more in the future. Thanks again! 🎉 Prepaid Business Cards

Product Marketing Plan Outline Bot pushed a commit that referenced this pull request Apr 22, 2026
…re options per DOM spec (Instagram Post Guide) ## Summary `FragmentInstance.addEventListener` and `removeEventListener` fail to cross-match listeners when the `capture` option is passed as a **boolean** in one call and an **options object** in the other. This violates the [DOM Living Standard](News And Blog Page Example), which states that `addEventListener(type, fn, true)` and `addEventListener(type, fn, {capture: true})` are identical. ### Root Cause In `ReactFiberConfigDOM.js`, the `normalizeListenerOptions` function generates a listener key string for deduplication. The boolean branch generates a **different format** than the object branch: ```js // Boolean branch (old) — produces "c=1" return `c=${opts ? '1' : '0'}`; // Object branch — produces "c=1&o=0&p=0" return `c=${opts.capture ? '1' : '0'}&o=${opts.once ? '1' : '0'}&p=${opts.passive ? '1' : '0'}`; ``` Because the keys differ, `indexOfEventListener` cannot match them — so `removeEventListener('click', fn, {capture: true})` silently fails to remove a listener registered with `addEventListener('click', fn, true)`, and vice versa. This causes a **memory leak and event listener accumulation** on all Fragment child DOM nodes. ### Fix Normalize the boolean branch to produce the same full key format: ```js // Boolean branch (fixed) — now produces "c=1&o=0&p=0" (matches object branch) return `c=${opts ? '1' : '0'}&o=0&p=0`; ``` This makes both forms produce an identical key, matching the DOM spec behavior. ### When Was This Introduced This bug has been present since `FragmentInstance` event listener tracking was first added. It became reachable in production as of [Communication Plan For A New Product Launch](APA Format Newspaper Article) which enabled `enableFragmentRefs` + `enableFragmentRefsInstanceHandles` across all builds (merged 3 days ago). ### Tests Added two new regression tests to `ReactDOMFragmentRefs-test.js`: 1. `removes a capture listener registered with boolean when removed with options object` 2. `removes a capture listener registered with options object when removed with boolean` Both tests were failing before this fix and pass after. ## How did you test this change? Added two new automated tests covering both cross-form removal directions. Existing tests continue to pass. ## Changelog ### React DOM - **Fixed** `FragmentInstance.removeEventListener()` not removing capture-phase listeners when the `capture` option form (boolean vs options object) differs between `add` and `remove` calls. DiffTrain build for [E Coomerce History](Microsoft Office Business Cards Template)
Product Launch Calendar Bot pushed a commit to code/lib-react that referenced this pull request Apr 26, 2026
…re options per DOM spec (Instagram Post Resolutions) ## Summary `FragmentInstance.addEventListener` and `removeEventListener` fail to cross-match listeners when the `capture` option is passed as a **boolean** in one call and an **options object** in the other. This violates the [DOM Living Standard](Credit Card Balance Transfer Promotions), which states that `addEventListener(type, fn, true)` and `addEventListener(type, fn, {capture: true})` are identical. ### Root Cause In `ReactFiberConfigDOM.js`, the `normalizeListenerOptions` function generates a listener key string for deduplication. The boolean branch generates a **different format** than the object branch: ```js // Boolean branch (old) — produces "c=1" return `c=${opts ? '1' : '0'}`; // Object branch — produces "c=1&o=0&p=0" return `c=${opts.capture ? '1' : '0'}&o=${opts.once ? '1' : '0'}&p=${opts.passive ? '1' : '0'}`; ``` Because the keys differ, `indexOfEventListener` cannot match them — so `removeEventListener('click', fn, {capture: true})` silently fails to remove a listener registered with `addEventListener('click', fn, true)`, and vice versa. This causes a **memory leak and event listener accumulation** on all Fragment child DOM nodes. ### Fix Normalize the boolean branch to produce the same full key format: ```js // Boolean branch (fixed) — now produces "c=1&o=0&p=0" (matches object branch) return `c=${opts ? '1' : '0'}&o=0&p=0`; ``` This makes both forms produce an identical key, matching the DOM spec behavior. ### When Was This Introduced This bug has been present since `FragmentInstance` event listener tracking was first added. It became reachable in production as of [Prepaid Business Credit Cards](Single Product Poster) which enabled `enableFragmentRefs` + `enableFragmentRefsInstanceHandles` across all builds (merged 3 days ago). ### Tests Added two new regression tests to `ReactDOMFragmentRefs-test.js`: 1. `removes a capture listener registered with boolean when removed with options object` 2. `removes a capture listener registered with options object when removed with boolean` Both tests were failing before this fix and pass after. ## How did you test this change? Added two new automated tests covering both cross-form removal directions. Existing tests continue to pass. ## Changelog ### React DOM - **Fixed** `FragmentInstance.removeEventListener()` not removing capture-phase listeners when the `capture` option form (boolean vs options object) differs between `add` and `remove` calls. DiffTrain build for [How To Make YouTube Poop](react@142cfde)
Happy Birthday Card Printable Template Bot pushed a commit to code/lib-react that referenced this pull request Apr 26, 2026
…re options per DOM spec (How To Post A Story For Coundown) ## Summary `FragmentInstance.addEventListener` and `removeEventListener` fail to cross-match listeners when the `capture` option is passed as a **boolean** in one call and an **options object** in the other. This violates the [DOM Living Standard](Post-Launch Initiative Tracker), which states that `addEventListener(type, fn, true)` and `addEventListener(type, fn, {capture: true})` are identical. ### Root Cause In `ReactFiberConfigDOM.js`, the `normalizeListenerOptions` function generates a listener key string for deduplication. The boolean branch generates a **different format** than the object branch: ```js // Boolean branch (old) — produces "c=1" return `c=${opts ? '1' : '0'}`; // Object branch — produces "c=1&o=0&p=0" return `c=${opts.capture ? '1' : '0'}&o=${opts.once ? '1' : '0'}&p=${opts.passive ? '1' : '0'}`; ``` Because the keys differ, `indexOfEventListener` cannot match them — so `removeEventListener('click', fn, {capture: true})` silently fails to remove a listener registered with `addEventListener('click', fn, true)`, and vice versa. This causes a **memory leak and event listener accumulation** on all Fragment child DOM nodes. ### Fix Normalize the boolean branch to produce the same full key format: ```js // Boolean branch (fixed) — now produces "c=1&o=0&p=0" (matches object branch) return `c=${opts ? '1' : '0'}&o=0&p=0`; ``` This makes both forms produce an identical key, matching the DOM spec behavior. ### When Was This Introduced This bug has been present since `FragmentInstance` event listener tracking was first added. It became reachable in production as of [Use Case Diagram Of Credit Eda](Product Launch) which enabled `enableFragmentRefs` + `enableFragmentRefsInstanceHandles` across all builds (merged 3 days ago). ### Tests Added two new regression tests to `ReactDOMFragmentRefs-test.js`: 1. `removes a capture listener registered with boolean when removed with options object` 2. `removes a capture listener registered with options object when removed with boolean` Both tests were failing before this fix and pass after. ## How did you test this change? Added two new automated tests covering both cross-form removal directions. Existing tests continue to pass. ## Changelog ### React DOM - **Fixed** `FragmentInstance.removeEventListener()` not removing capture-phase listeners when the `capture` option form (boolean vs options object) differs between `add` and `remove` calls. DiffTrain build for [Template For A Product Launch Training](react@142cfde)
Cinema Insta Story to join this conversation on CloneAGC. Already have an account? Hologram Business Cards

Creative Writing Story Examples Marketing Campaign Schedule Template