Angular 2 x React Js

6 fev

Fala Galera,

Hoje venho falar sobre as duas sensações do momento o Angular 2.0 e o ReactJS.

Não venho falar sobre quem é o melhor para se usar no desenvolvimento Front-End e sim fazer vocês tomarem a melhor decisão sobre qual utilizar em um determinado projeto.

Comparando Banana com Laranja

Sim, estamos comparando banana com laranja. Angular é um Framework e o React é uma biblioteca. O Angular foi feito para resolver diversos tipos de problemas dentro do desenvolvimento Front-End. Já o React foi feito para resolver somente um problema, o problema de interface.

Por que usar Angular 2.0.

Por diversos motivos devemos olhar com carinho sobre o Angular 2.0.  O Angular 2.0 está passando por diversas mudanças desde a sua versão inicial. O desenvolvimento em Angular 2.0 enfatiza a remoção de complexidade em seu código e cria um novo conceito de como se programar em Angular 2.0. Foram removidos controladores, módulos e escopos, conceitos que faziam parte da versão 1.x. O que resta é uma estrutura que usa recursos do ES2015 ao máximo e faz com que as decisões de implementações se tornem mais fácil também diminuindo a sua curva de aprendizado.

Além do foco de tornar as coisas mais simples há outras coisas boas que essa versão traz:

Pontos Fortes Pontos Fracos
Performance (3.5x mais rapido que Angular 1.x) Pouca documentação
Fácil de Testar Encontrar recursos ou tirar dúvidas pode ser difícil
É um Framework (Tudo que você precisa para desenvolver está aqui)
ES2015 Ready (Você já pode usar novas funcionalidades da linguagem javascript)

Por que usar React

React é uma biblioteca leve e simples de se usar. Na verdade, as pessoas tende a comparar o React como um framework porém ele não é, ele é uma biblioteca que foi desenvolvida para resolver um único problema no qual ele faz muito bem, renderizar componentes de interfaces. No entanto, o cenário mais comum é usá-lo com uma arquitetura Flux.

O React foi criado pelo pessoal do Facebook para resolver seu problema de interface de usuário, porém acabou dando tão certo que eles resolveram disponibilizar para a comunidade.

O React usa o novo JSX para você desenvolver seus componente, o React é incrivelmente rápido na renderização dos componente e do DOM já que por trás ele usa uma biblioteca chamada Virtual DOM. A curva de aprendizado do React não é tão grande, o grande problema é você se acostumar com o JSX. O React também está totalmente preparado para o ES2015 o que o torna ainda mais interessante.

Além do foco de construir componentes podemos destacar:

Pontos Fortes Pontos Fracos
Performance  Flux pode ser um paradigma bem difícil de se lidar em um primeiro momento
Simplicidade  Algumas pessoas não curtem o JSX
Componentização de interfaces
É uma biblioteca leve e simples (pegue as coisas que se encaixam no seu projeto)
ES2015 Ready (Você já pode usar novas funcionalidades da linguagem javascript)

Vamos ao exemplo:

Primeiro vamos ao exemplo de um aplicação To-do em Angular 2.0

import {Component} from 'angular2/core';
import {bootstrap} from 'angular2/platform/browser'

@Component({
  selector: 'display',
  template: `<h1>{{title}}</h1>
    <ul>
        <li *ngFor='#task of tasks'>
            {{ task.task }} <a href='#' (click)='delete(task.id)'>Excluir</a>
        </li>
    </ul>
    <input #task type='text' placeholder='nova tarefa' />
    <button (click)='addTask(task)'>Add</button>            
    `
})
export class TaskComponent {
    title = 'Minhas Tasks'
    tasks = [
        {id: 1, task: "Levar o cachorro na rua"},
        {id: 2, task: "Comprar comida"},
    ];
    
    addTask(text:HTMLInputElement) {
        
        var id= this.tasks.length + 1;
        
        var task = {
            id: id,
            task: text.value  
        };

        this.tasks.push(task);
        text.value = "";
        
    };
    
    delete(taskId:number){
        var newItens = this.tasks.filter(function(el){
            return taskId != el.id;  
        });
        
        this.tasks = newItens;         
    }
}

bootstrap(TaskComponent);

Vamos agora ao exemplo de uma aplicação To-do em React

var TaskList = React.createClass({
           createItem: function(item){
               return (
                   <li key={item.id}>{item.task} <a href='#' onClick={this.props.delete.bind(null, item)}>Excluir</a></li>
               );
           },
           render: function(){
               return (
                   <div>
                       <h1>Minhas Tasks</h1>
                       <ul>
                           {this.props.data.task.map(this.createItem)}
                       </ul>                            
                   </div>                  
               );
           }
       });
       
       var TaskApp = React.createClass({
           getInitialState:function(){
               var data = [
                   {id: 1, task: "Levar o cachorro na rua"},
                   {id: 2, task: "Comprar comida"},
               ];
               
               return { task: data }
           },
           delete: function(itemToDelete){
               
               var newItems = _.reject(this.state.task, function(item){
                   return itemToDelete == item
               });
               
               this.setState({task:newItems});
           },
           handleChange: function(e) {
               this.setState({text: e.target.value});
           },
           handleSubmit: function(e) {
              e.preventDefault();
              
              var newTask = { id : this.state.task.length + 1, task: this.state.text};
              this.state.task.push(newTask);
              this.setState({task:this.state.task});                
              this.state.text = "";
           },
           render: function(){
               return (
                   <div>
                       <TaskList data={this.state} delete={this.delete} />
                       <form onSubmit={this.handleSubmit}>
                           <input onChange={this.handleChange} value={this.state.text} />
                           <button>Add</button>
                       </form>
                   </div>
               );
           }
       });
       
       
       ReactDOM.render(
           <TaskApp />,
           document.getElementById('content')
       );

 

Conclusão:

Na minha opinião, não existe vencedores nem perdedores, o melhor Framework/Biblioteca é aquele que se encaixa melhor no seu projeto, cada framework ou biblioteca tem as suas particularidades e seus defeitos.

Com o Angular as vezes você pode estar querendo matar uma formiga usando uma bomba atômica porém com o React você pode precisar de coisas que simplesmente ele não faz e o Angular faz muito bem como por exemplo a parte de rota e a parte de teste, ou seja, pense no que seu projeto precisa naquele momento e escolha o Framework/Biblioteca que se encaixa melhor nos requisitos do projeto.

Não deixe de comentar!

Abs e até a próxima.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.