News for hackers. Stuff that matters.
Re:React: You Might Not Need an Effect by Rapzid on Thursday March 23, 2023 @06:26AM (#35272530)
There is a new experimental hook, useEffectEvent, whose only discernable functionality based on the documentation and information available is to quiet the linter. I'm not sure that's all it does since I haven't dug into the React source code, but that's what many are speculating.
Re:React: You Might Not Need an Effect by andrewingram on Thursday March 23, 2023 @06:37AM (#35272610)
It makes it so that the same instance of a function is used for all renders, but that it always points to the data closed over by the latest render; it eliminates a whole class of scenarios that normally lead to gnarly dependency array tomfoolery with useCallback, useMemo and useEffect.

It's quite a common hook to try to invent in user-land (i've seen it in numerous projects), it's not just a linter silencer.

Re:React: You Might Not Need an Effect by Rapzid on Thursday March 23, 2023 @06:52AM (#35272736)
> but that it always points to the data closed over by the latest render

It's my understanding that this was to be the behavior of the canceled useEvent hooks but that the new useEffectEvent hook does not return a stable reference.

Do you have sources for the behavior of the new hook?

Re:React: You Might Not Need an Effect by andrewingram on Thursday March 23, 2023 @07:11AM (#35272914)
https://react.dev/learn/separating-events-from-effects#decla...

> Here, onConnected is called an Effect Event. It’s a part of your Effect logic, but it behaves a lot more like an event handler. The logic inside it is not reactive, and it always “sees” the latest values of your props and state.

Re:React: You Might Not Need an Effect by Rapzid on Thursday March 23, 2023 @07:21AM (#35272990)
A bare closure would always see the latest values because it closes over them during render. And the latest useEffect closure will have closed over that method..

Here is the test suite for useEffectEvent and the test ensuring it does not provide a stable reference: https://github.com/facebook/react/blob/main/packages/react-r...

Re:React: You Might Not Need an Effect by andrewingram on Thursday March 23, 2023 @08:12AM (#35273483)
You're right, i'll redact/edit. Hm, this doc page is exceptionally confusing.
Re:React: You Might Not Need an Effect by robby_w_g on Thursday March 23, 2023 @01:57PM (#35278711)
As far as I can tell, useEffectEvent is just the useEvent hook but renamed to reduce scope. useEvent was originally going to provide performance optimizations when creating event handlers in a function component and it was going to solve the issue of event handlers causing effects to re-fire[1].

Now it's just going to focus on the effect issue.

[1] https://github.com/reactjs/rfcs/blob/useevent/text/0000-usee...