Start here. This is the direct spoken answer to practice first.
Overview
The distinction explains why code can run without a visible DOM change and why side effects do not belong in rendering.
During render, React calls components to calculate the next UI from props, state, and context. Rendering must stay pure because React may pause, repeat, or discard that work. During commit, React applies the required DOM changes. Layout effects run around that committed layout work, the browser can paint, and passive effects run afterward.