Globalny state aplikacji jest bardzo pomocny przy większych aplikacjach, rzeczywiście jest tak jak piszesz przy mniejszej skali aplikacjach jest to przerost formy nad treścią natomiast przy większych jest na prawdę pomocny, unikamy emitowania, przekazywania propsów po 3-4 komponenty w dół i mam dostęp do stanu z każdego komponentu :)
Przekazywanie propsów 3-4 komponenty w dół jest upierdliwe, ale z drugiej strony nie wiem, czy to jest rozwiązywanie właściwego problemu. Jeśli w komponencie 4 poziomy w dół mamy potrzebę odwołania się do danych z góry, to ja bym się zastanowił, czy hierarchia komponentów jest dobrze zaprojektowania. Może to podłączanie globalnego stanu(ew. kontekstu) bywa po prostu krótkowzrocznym wygodnictwem, a nie faktyczną potrzebą?
Owszem, czasem mamy do czynienia z czymś, co faktycznie ma być globalne (np. wybrana wersja językowa strony, nazwa zalogowanego użytkownika, czy wybrano jasny/ciemny motyw), ale czasem ludzie nawet coś, co jest do bólu lokalne, traktują jako część globalnego stanu (np. dane jakiejś encji), którą trzeba zassać ze store'a za pomocą jakiegoś selektora. I kod się rozrasta.
Poza tym czasami przekazywanie propsów jest naturalne, jeśli np. mapujesz tablicę
function Todos({ todos } ) {
return todos.map(todo => <Todo todo={todo} />
}
to takie coś będzie dla mnie bardziej naturalne niż wstrzykiwanie cząstki globalnego stanu do komponentu Todo.