Son los dos mecanismos para manejar datos en un componente. La distinción es la base del flujo de datos en React.
Datos que un componente recibe de su padre. Son de solo lectura: el componente no los modifica, solo los consume.
Datos que el componente posee y puede cambiar a lo largo del tiempo. Al actualizar el estado, React vuelve a renderizar el componente.
const [contador, setContador] = useState(0)Si un dato cambia con la interacción y vive en este componente, es estado. Si viene de arriba y no debe mutarse aquí, es prop.