Muito legal o artigo e obrigado por trazer isso para o TabNews!
Uma pergunta: o React é declarativo na camada da apresentação (na parte do return
do seu exemplo). Mas ele me parece até certo ponto imperativo no restante ou estou enganado? Por exemplo, quando você define que setIsLoading(true);
ou qualquer outra coisa que o componente fizer, como uma chamada HTTP
por fetch
.
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.