Skip to content

Conversation

jf-eirinha
Copy link
Contributor

@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. Or we could also specifically disallow its usage inside JSX. 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

Copy link
Contributor

@jbrown215 jbrown215 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great catch, thank you!

@jbrown215 jbrown215 merged commit 2381ecc into facebook:main Oct 16, 2025
246 of 247 checks passed
github-actions bot pushed a commit that referenced this pull request Oct 16, 2025
…34820)

## 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.
Or we could also specifically disallow its usage inside JSX. 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.

DiffTrain build for [2381ecc](2381ecc)
github-actions bot pushed a commit that referenced this pull request Oct 16, 2025
…34820)

## 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.
Or we could also specifically disallow its usage inside JSX. 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.

DiffTrain build for [2381ecc](2381ecc)
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

3 participants