-
-
Notifications
You must be signed in to change notification settings - Fork 349
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for effects with cleanup? #64
Comments
useEffect(() => {
function handleStatusChange(status) {
setIsOnline(status.isOnline)
}
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange)
return function cleanup() {
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange)
}
} The use case from the react document looks like when useEffect returns a function, we execute it |
Yes:
|
(Preact hooks are a good source of reference, as the code is very simple and easy to understand.) |
Well, I need to think carefully about the correct implementation here. My previous understanding may be insufficient.~ |
@mindplay-dk I refactored the useEffect, and now it should be able to resolve these two issues #63 #64 |
supported Now! |
Looks good, just one small deviation from how React works - from the description in the yellow note box on this page:
So, to summarize:
|
Where is the deviation? The summarize is right 😆 |
@mindplay-dk I tried the use case of react, which would not execute when the array was empty. useEffect(f, []) // ✅ return function( such as clean up) should not run. So fre's current behavior should be consistent with react |
The clean-up function of an effect always runs - the question is only when. With an empty array, the clean-up function should run only once, when the component is destroyed. |
I didn't even notice this detail. I've fixed it and it works now 💯 |
Looks good! Still needs tests for |
We have tests for this now. Closing! |
Should we add effects with cleanup?
There is currently no way to perform an action when a component gets destroyed.
The text was updated successfully, but these errors were encountered: