Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.Sign up
Don't bother comparing constructor when deps are not provided #14594
When no dependencies are passed to an effect hook, what we used to do is compare the effect constructor. If there was no change, then we would skip firing the effect. In practice, this is a useless optimization because the constructor will always be different when you pass an inline closure. And if you don't pass an inline closure, then you can't access any props or state.
There are some edge cases where an effect that doesn't close over props or state could be useful, like reference counting the number of mounted components. But those are rare and can be addressed by passing an empty array of dependencies.
By removing this "optimization," we can avoid retaining the constructor in the majority of cases where it's a closure that changes on every render.
I made corresponding changes to the other hooks that accept dependencies, too (useMemo, useCallback, and useImperativeHandle).
ReactDOM: size: 0.0%, gzip: -0.0%
Details of bundled changes.