React

O React é a antiga nova sensação do pedaço no que se diga "formas de se fazer a interface de um site ou qualquer coisa parecida com um". Foi uma ideia que um engenheiro do Facebook teve para resolver um probleminha que teve e cresceu tanto que vários sites e aplicativos inteiros usam ele, alguns deles rodando no servidor inclusive.

Mas o que há de mais no React? Um paradigma diferente. Antes o comum era se programar sites posicionando elementos no HTML, depois colocando estilo nesses elementos e só depois fazia-se a interação desses. Com o React essa relação fica um pouco invertida: ao invés de alterar os elementos caso haja uma interação os elementos já são posicionados conforme o que pode acontecer.

Vejamos se eu posso exemplificar isso de uma forma simples: pensando o site ou aplicativo como um espaço virtual, ao invés de se colocar nele uma caixa vermelha e depois dizer a ela “se alguém encostar em você fique verde” coloca-se uma caixa que é vermelha se não tiver nada encostando nela e verde se algo tiver encostando.

Continuando o exemplo anterior, um pouco de pseudocódigo: ao invés de escrever no HTML e depois escrever no JavaScript $(‘caixa’).on(‘encostar’, e => e.style.fill = ‘verde’) se escreve <caixa fill=${ escostou? não “verde“ sim vermelha”}>, tudo junto.

Tá, isso talvez não seja tão novo assim: se me lembro bem o Angular faz algo parecido. Só que tem um porém: enquanto o Angular faz isso mudando a forma que o HTML é escrito o React muda a forma que o JavaScript é escrito. De alguma forma ambos foram bem aceitos, mas sou parte do grupo que achou o primeiro estranho e o segundo menos estranho.

Minha experiência com o React, como já postei uma vez, foi fazer a versão 5 e 6 do Harpa e Bíblia, atual adorai. Não sei o que deu na minha cabeça em usar ele, talvez por que parecia fácil de usar, ou por que era moda. Já faz um ano que estou mexendo com isso e agora que expliquei um pouco do React vou falar o que achei disso.

Como falei anteriormente há uma nova forma de se organizar o código, o que ajudou muito. Ao invés de ter um arquivo organizando a estrutura e outro a lógica tudo fica junto, o que é bom. Foi muito produtivo também: há várias ferramentas, rapidamente consegui refazer o básico do site do zero sem problemas.

Quanto ao CSS no caso do adorai não cheguei a usar módulos CSS, que é outra guerra que ocorre nesse ramo, resolvi ficar com a bagunça de um longo arquivo CSS (comecei com SASS, mas logo ficou uma bagunça e virou CSS).

Conforme o desenvolvimento foi avançando chegaram os problemas: o primeiro que aconteceu foi no modo de apresentação do site. Como eu disse a forma que os elementos se interagem baseia-se no estado deles, não em uma lógica separada. Os elementos que cuidam do conteúdo do site, isso é, mostram os versículos e estrofes, tinham que ser “renderizados” e depois recalculados para que ficassem apresentáveis. De certa forma acho que foi falta de organização minha, mas foi uma dor de cabeça.

Outro problema: o React só cuida da parte visual e organização de elementos, mas é enorme! Acontece que ele é o garotinho que tem cara de bonzinho, fala que vai na sua casa ajudar a arrumar a TV e aproveita e arruma o computador e a geladeira sem pedir.

Quero dizer: o React cuida também da parte de compatibilidade de código, cuida da parte de normalização de eventos, reorganiza a lógica deles para melhorar a performance (o que gera problemas se você não saber disso)… são coisas que acabaram só complicando a vida, além de aumentar muito o tamanho do código.

Aí eu fiquei sabendo de uma versão do React simplificada, React-lite. Fui usar ela: funcionou muito bem. Só que acontece que por algum motivo agora meu site não funciona mais direito. Vou ver os erros no console: não aparece nada que dê para aproveitar.

Já estou planejando a versão 7 do site. Não quero usar mais React. Já tentei fazer só usando vanilla uma vez e deu errado. Dessa vez vou tentar usar micro módulos, se possível. Além disso tentar melhorar a organização do site para evitar problemas como os que já tive. É bem complicado isso tudo.