Opa, obrigado pelo comentário, Filipe!
Uma honta ter você aqui hahahaha.
Sim, estamos falando sobre a camada de apresentação em si, o que gera a nossa UI.
Se olharmos de forma separada, como você fez, podemos considerar a parte "lógica" como imperativa. Mas - na minha interpretação (que não significa nada hahahaha) - se olharmos o conjunto da obra em si (o React como um todo) podemos considerar que até mesmo o setIsLoading(true);
é declarativo, pois o simples fato de executarmos essa linha de código evita que tenhamos que fazer outras ações de maneira imperativa:
button.disabled = true;
button.textContent = 'Loading...';
No outro exemplo que você deu de fazer uma chamada fetch
, o React hoje possui um mecanismo próprio chamado createResource
para lidar com a assincronicidade da chamada e não travar o UI do usuário enquanto aguarda pela resposta.
Para nós, basta que utilizemos o fetch
, mas por trás dos panos o React abstrai lógicas que teríamos que fazer de maneira imperativa.
Novamente, é apenas a minha interpretação e a forma que eu vejo o React (o todo), mas a camada de apresentação definitivamente é declarativa.