@include passes variables and shares the parent scope, which means a partial silently depends on whatever happened to be defined where it was included. @component takes a slot and an explicit data array.
@component('alert', ['variant' => 'warning'])
@slot('title')
Stock is low
@endslot
Fewer than five units remain.
@endcomponent
The distinction that matters is scope: a component sees only what was passed, so moving one somewhere else cannot break it by removing an incidental variable. Named slots handle the case an include cannot — content that has to land in two different places in the wrapper. This is not the class-based component system that arrives later; it is a template construct with no PHP class behind it.