Start here. This is the direct spoken answer to practice first.
Why this question matters
Component design is the frontend version of API design. Poor boundaries create tangled state, awkward props, and components that are hard to test or reuse.
I would split components around responsibilities and state ownership. A container or page component can fetch data and coordinate workflow state, while smaller presentational components render specific pieces of UI from props. Props should be explicit and shaped around what the child needs, not the entire parent data object by default. If a child needs to change something, it receives a clear callback such as onSave or onSelect.