Reuse starts with a real pattern.
A component should earn its abstraction. Start from repeated interface behavior or a meaningful shared pattern rather than extracting every small piece of markup.
Give components clear responsibilities
A component is easier to understand and maintain when its job is obvious. Keep data, presentation and interaction concerns separated where that improves clarity.
Avoid one-off duplication
When similar screens evolve independently, small differences accumulate. Shared components and consistent conventions make later changes safer.
Design for the next screen
Good component architecture considers likely reuse without trying to predict every future requirement. Build the useful boundary that exists today.