Git Product home page Git Product logo

Comments (13)

mindplay-dk avatar mindplay-dk commented on May 15, 2024 1

Looks good!

Still needs tests for useEffect() with no second argument, and with [] - let's leave this issue open until all the tests are in place.

from fre.

yisar avatar yisar commented on May 15, 2024
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
The function contains unmouted logic
Am I correct?

from fre.

mindplay-dk avatar mindplay-dk commented on May 15, 2024

Yes:

the function passed to useEffect may return a clean-up function [...] The clean-up function runs before the component is removed from the UI to prevent memory leaks. Additionally, if a component renders multiple times (as they typically do), the previous effect is cleaned up before executing the next effect

from fre.

mindplay-dk avatar mindplay-dk commented on May 15, 2024

(Preact hooks are a good source of reference, as the code is very simple and easy to understand.)

from fre.

yisar avatar yisar commented on May 15, 2024

Well, I need to think carefully about the correct implementation here. My previous understanding may be insufficient.~

from fre.

yisar avatar yisar commented on May 15, 2024

@mindplay-dk I refactored the useEffect, and now it should be able to resolve these two issues #63 #64

from fre.

yisar avatar yisar commented on May 15, 2024

supported Now!

from fre.

mindplay-dk avatar mindplay-dk commented on May 15, 2024

Looks good, just one small deviation from how React works - from the description in the yellow note box on this page:

If you want to run an effect and clean it up only once (on mount and unmount), you can pass an empty array ([]) as a second argument. This tells React that your effect doesn’t depend on any values from props or state, so it never needs to re-run.

So, to summarize:

useEffect(f)       // ✅ effect (and clean-up) every time
useEffect(f, [])   // ❌ effect (and clean-up) only once in a component's life
useEffect(f, [x])  // ✅ effect (and clean-up) when property x changes

from fre.

yisar avatar yisar commented on May 15, 2024

Where is the deviation? The summarize is right 😆

from fre.

yisar avatar yisar commented on May 15, 2024

@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

from fre.

mindplay-dk avatar mindplay-dk commented on May 15, 2024

I tried the use case of react, which would not execute when the array was empty.

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.

from fre.

yisar avatar yisar commented on May 15, 2024

I didn't even notice this detail. I've fixed it and it works now 💯

from fre.

mindplay-dk avatar mindplay-dk commented on May 15, 2024

We have tests for this now. Closing!

from fre.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.