Skip to content

[Suggestion]: Adding documentation to note that Effects in children components are committed before their parent component #7748

Open
@tengweiherr

Description

@tengweiherr

Summary

Adding documentation to the useEffect page to note that Effects in children components are committed before their parent component

Page

https://react.dev/reference/react/useEffect

Details

Hi

I was digging into React internals and learning how it works under the hood. I came across an interesting behaviour in Effects -- where the Effects in children components are committed before their parent component.

For example:

function Parent({ children }) { useEffect(() => { console.log("Parent committed effect"); }, []); return <div>{children}</div>; } function Child() { useEffect(() => { console.log("Child committed effect"); }, []); return <p>Child</p>; } export default function App() { return ( <Parent> <Child /> </Parent> ); } 

The result in the console will be

Child committed effect Parent committed effect 

(I made a small animation describing the traversal)

Image

I understand that it is due to how React traverses the Fiber tree during the Commit phase (recursivelyTraversePassiveMountEffects), but it seems like it does confuse some people in

This is not a bug, but I think it would be helpful to have this documented, perhaps in the Caveats or the Troubleshooting section to avoid confusion around this "unexpected behaviour".

What do you think? :)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      close