Skip to content

Conversation

jf-eirinha
Copy link

@jf-eirinha jf-eirinha commented Oct 12, 2025

Summary

Fixes #34793.

We are allowing passing down effect events when they are inlined as a prop.

<Child onClick={useEffectEvent(...)} />

This seems like a case that someone not familiar with useEffectEvent's purpose could fall for so this PR introduces logic to disallow its usage.

An alternative implementation would be to modify the name and function of recordAllUseEffectEventFunctions to record all useEffectEvent instances either assigned to a variable or not, but this seems clearer. Feel free to suggest any improvements.

How did you test this change?

  • Added a new test in packages/eslint-plugin-react-hooks/__tests__/ESLintRulesOfHooks-test.js. All tests pass.

@meta-cla meta-cla bot added the CLA Signed label Oct 12, 2025
@eps1lon eps1lon requested a review from poteto October 13, 2025 08:56
@react-sizebot
Copy link

Comparing: ead9218...350ed33

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.68 kB 6.68 kB = 1.83 kB 1.83 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 604.98 kB 604.98 kB = 107.14 kB 107.14 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.69 kB 6.69 kB = 1.83 kB 1.83 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 663.95 kB 663.95 kB = 117.03 kB 117.03 kB
facebook-www/ReactDOM-prod.classic.js = 687.81 kB 687.81 kB = 121.07 kB 121.07 kB
facebook-www/ReactDOM-prod.modern.js = 678.24 kB 678.24 kB = 119.42 kB 119.42 kB

Significant size changes

Includes any change greater than 0.2%:

(No significant changes)

Generated by 🚫 dangerJS against 350ed33

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: react-hooks/rules-of-hooks does not error when useEffectEvent is passed down when inlined in a prop

2 participants