Ответ
При смене ключа React полностью удаляет старый компонент из DOM и создает новый, что приводит к потере состояния и запуску всех хуков жизненного цикла (useEffect, useLayoutEffect и т.д.) заново. Это полезно, когда нужно принудительно сбросить состояние компонента.
При смене пропса React пытается обновить существующий компонент, сохраняя его состояние. Перерендер происходит, но без полного удаления/создания DOM-узла. Хуки жизненного цикла срабатывают в зависимости от их зависимостей.
// Смена ключа (полный сброс)
<Component key={someKey} />
// Смена пропса (обновление)
<Component someProp={someValue} />