De todos os frameworks Javascript utilizados no mercado você deve ficar com bibliotecas.

E ReactJS é o nome da biblioteca que você vai adorar (:

Já se deparou com quantos frameworks Javascript existem?

Escrevendo de cabeça.: Ember, Angular, Backbone, Knockout, Meteor, Aurelia….

Para agradar todos de uma maneira bem simples, iremos contextualizar nossa conversa em EMBALAGENS DE KETCHUP.

Entre todos os frameworks que existem, faça a sua escolha.:

(Embalagem de Ketchup)

Todos os frameworks Javascript que temos atualmente no mercado.

Normalmente, essa é a sua escolha.:

(Embalagem de Ketchup + Mostarda + Maionese)

Uau! Que fantástico! O framework que eu escolhi consegue fazer tudo! Ela é meu 'model', minha 'view', meu 'controller', requisições HTTP, rotas, cache, session e vários módulos para tudo que possa imaginar! De quebra ela pode até ser usada no meu server!

Frameworks ajudam muito, de uma maneira rápida e fácil. Alguns conseguem transformar uma linguagem de markup em algo inteligentíssimo, tudo funciona magicamente!

É tão fácil manipular tudo na própria view, o framework escolhido me permite coisas mágicas como IF, FOR, SHOW/HIDE e outras coisas que não demoram nem 5 minutos para estudar e aprender!

É como se tudo tivesse de alguma forma espiritualmente ligado, defino um controller para aquela view nela mesma e posso chamar todas as suas funcionalidades.

Só abrir a tampa e usar (:
Eu sei que vou precisar misturar Ketchup, Mostarda e Maionese porque perderia tempo usando três embalagens diferentes? Eu escolhi uma que me atende completamente!! 
Parece ótimo não?

Parece fantástico, confesso que também cai nessa ilusão (:

- Você tem Ketchup?
- Tenho sim, está aqui.
- Nossa tem uma cor diferente, parece até que tem Mostarda…
- Ah! É que eu escolhi um que é Ketchup, Mostarda e Maionese tudo junto!
- Eca! Eu odeio Mostarda!

O projeto vai chegando na metade surgindo problemas não pensados previamente e alguns desafios que sua escolha não atende muito bem.
Quando surge aquela necessidade “DO NADA” de consumir um serviço em SOAP quando era para ser sempre HTTP, ou incorporar aquela tela que o cliente já tem funcionando, ou até suporte no IE, entre outras coisas malucas que o seu cliente precisa.
Talvez por conta da estrutura do framework e modo de funcionamento o framework escolhido pode não atender a essas necessidades.

Não existe bala de prata.

Na prática o que realmente acontece?

Em algum momento, normalmente na metade do uso, o modo de utilização vai sofrer mudanças para atender uma necessidade específica. A solução para o framework escolhido e a embalagem do ketchup são bem parecidas:

Para voltar a usar, só se virar de cabeça para baixo e dar umas porradas até obter sucesso.

O mais engraçado disso tudo é que essa solução vai receber o nome de "o único jeito que funciona", caso ocorra constantemente vai receber um nome mais legal ainda: "padrão".

Afinal, qual a função do Javascript que existem nos Browsers?

Em uma visão bem macro, a World Wide Web (famoso WWW) existe e somente é possível por conta de três coisas básicas.: HTML, CSS e JAVASCRIPT.

HTML sendo componentes básicos e que precisamos no nosso dia-a-dia.
CSS deixando os componentes bonitos.
Javascript deixando tudo inteligente.

Com Javascript é possível escrever no HTML.:

document.write(“<div>");
for(var i=0;i<10;i++){
document.write("
<h1>Hello World!</h1>");
}
document.write(“</div>");

Mas em um componente HTML não é possível escrever Javascript.:

<div for(var i=0;i<10;i++){
<h1> Hello World! </h1>
}/>

O sucesso dos frameworks é exatamente permitir escrever código no HTML, o desenvolvimento parece muito mais performático, mas será que o resultado disso é bom?

Javascript consegue manipular CSS e HTML, CSS consegue manipular os estilos do HTML, existe uma 'hierarquia' de tecnologias. Cada macaco no seu galho.

Apesar da ilusão de praticidade, estaremos remando contra a maré optando por preferir escrever código no HTML.

A tecnologia base não permite essa prática.

Descartando o framework escolhido e começando a trabalhar com bibliotecas.

ReactJS.

Essa é a cara do ReactJS.:

Prazer, ReactJS.
- Nossa, esse Ketchup é diferente! Eu não sei usar, não tem outro?
- Esse Ketchup foi feito para ter o MELHOR SABOR, ele só tem esse propósito! Experimente!
- Mas olha só essa embalagem! A tampa fica embaixo! Toda tampa tem que ficar em cima!
- Mas olha com carinho, tem uma explicação da tampa ser na parte inferior. Desse modo não precisa ficar batendo quando não está cheio...

Mas ReactJS não é aquela biblioteca só para UI? Cadê as requisições? Cadê o MVC? Cadê tudo pronto para ser usado?

Calma, para tudo isso existem outras bibliotecas que tem esse único propósito. Por conta de ter um foco único, tende-se a funcionar melhor e possuir incontáveis maneiras de serem utilizadas ;)

Bibliotecas com o seu único propósito: de ser ketchup picante, de ser mostarda e de ser maionese.

ReactJS faz exatamente o que o Javascript foi destinado a fazer para os Browsers.

Ser inteligente, dar vida aos componentes HTML, podendo controlar todo o HTML e respectivamente controlar seus estilos, vulgo CSS.

Quando começar a estudar sobre ReactJS vai se deparar com uma coisa que a princípio parece estranha:
ReactJS cria os elementos HTML pelo Javascript, sem falar da necessidade de PENSAR EM REACT.

Existe um motivo por essa prática de criar o HTML pelo Javascript, que pode parecer "estranha" a primeira vista.

Virtual DOM

from (http://coding.hassan.web.id/experience/eh-apasih-react-js-itu/)

No ReactJS você trabalha com um Virtual DOM, não diretamente com o DOM do browser. Assim quando o Virtual DOM é alterado existe uma comparação com o DOM real, caso acha alguma diferença entre eles, somente os componentes modificado serão renderizados.

Muito mais eficaz não?

Assim o ReactJS quer se tornar uma biblioteca construtora de User Interfaces. É o seu único propósito e faz muito bem.

Existem muitos "ReactJS" pela internet prontos para serem descobertos, uns para fazerem requisições, outros para caches e etc (:

Conclusão

Contextualize ao máximo suas necessidades e crie componentes com propósitos e focos únicos. Utilize as melhores ferramentas para cada um deles, mesmo que sejam distintas. Abandone soluções ponta-a-ponta.

direitos na imagem