Two ways data flows into a component — one it owns, one it's given.
Props flow one direction — from parent to child — and are read-only from the receiving component's perspective; a component should never modify its own props. State, by contrast, is owned internally by the component that declares it, can change over time, and triggers a re-render whenever it does. The distinction isn't just naming — it's about ownership and who's allowed to change what.
This is also where 'lifting state up' comes from: when two sibling components need to share or coordinate on the same piece of state, that state has to live in their closest common ancestor and get passed down as props to both. It's the default pattern for cross-component data sharing in React, and it's also the root of prop drilling — as trees get deeper, that shared state has to be threaded through every intermediate component whether or not it needs it.
What you'll walk away knowing