Componentização com React/Vue/Angular: Comparação Prática
Introdução aos Frameworks
React, Vue e Angular são os principais frameworks JavaScript para desenvolvimento front-end. Cada um tem sua abordagem única para a componentização, reusabilidade de código e gerenciamento de estado. Neste artigo, vamos comparar esses aspectos em cada framework, oferecendo uma visão clara para desenvolvedores iniciantes.
Componentização em React
React é conhecido por sua abordagem baseada em componentes. Componentes são blocos reutilizáveis que facilitam a criação de interfaces complexas. Em React, um componente pode ser uma função ou uma classe que retorna elementos JSX. Veja um exemplo simples de componente em React:
jsx
function Button(props) {
return <button>{props.label}</button>;
}
Componentização em Vue
Vue também usa uma abordagem baseada em componentes. Em Vue, componentes são definidos em arquivos .vue, que incluem template, script e estilo. Isso promove uma organização modular e fácil de gerenciar. Aqui está um exemplo de componente em Vue:
vue
<template>
<button>{{ label }}</button>
</template>
<script>
export default {
props: ['label']
}
</script>
Componentização em Angular
Angular usa uma abordagem baseada em componentes, mas com uma estrutura mais robusta. Cada componente é composto por um template, uma classe TypeScript e um arquivo de estilo. Essa organização clara facilita a manutenção de grandes projetos. Veja um exemplo de componente em Angular:
typescript
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-button',
template: '<button>{{ label }}</button>'
})
export class ButtonComponent {
@Input() label: string;
}
Reusabilidade de Código
Todos os três frameworks promovem a reusabilidade de código através de componentes. Em React, componentes podem ser facilmente reutilizados em diferentes partes da aplicação. Em Vue, a estrutura de arquivos .vue permite encapsular lógica e estilo. Em Angular, a forte tipagem de TypeScript e os decoradores fornecem uma base sólida para reutilização e escalabilidade.
Gerenciamento de Estado
Gerenciar estado é crucial em aplicações modernas. React usa bibliotecas como Redux ou Context API para gerenciamento de estado. Em Vue, a ferramenta principal é o Vuex, que oferece um padrão centralizado para gerenciar o estado. Angular utiliza serviços e o RxJS para manipulação de estado de forma reativa.
Aqui está um exemplo de gerenciamento de estado simples com React Context API:
jsx
const CountContext = React.createContext();
function App() {
const [count, setCount] = useState(0);
return (
<CountContext.Provider value={{ count, setCount }}>
<Counter />
</CountContext.Provider>
);
}
function Counter() {
const { count, setCount } = useContext(CountContext);
return (
<div>
<p>{count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
Gerenciamento de Estado em Vue com Vuex
typescript
<!-- App.vue -->
<template>
<div>
<p>{{ count }}</p>
<button @click="increment">Increment</button>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
export default {
computed: {
...mapState(['count'])
},
methods: {
...mapMutations(['increment'])
}
};
</script>
Gerenciamento de Estado em Angular com Serviços
typescript
<!-- app.component.html -->
<div>
<p>{{ count | async }}</p>
<button (click)="increment()">Increment</button>
</div>
// app.component.ts
import { Component } from '@angular/core';
import { CounterService } from './counter.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html'
})
export class AppComponent {
count = this.counterService.count$;
constructor(private counterService: CounterService) {}
increment() {
this.counterService.increment();
}
}
Exemplos Práticos:
Vamos considerar uma aplicação simples de lista de tarefas. Em React, você criaria componentes como Task e TaskList, reutilizando-os conforme necessário. Em Vue, os mesmos componentes seriam definidos em arquivos .vue, mantendo a modularidade. Em Angular, a estrutura seria similar, mas com mais ênfase em serviços para lógica de negócios e manipulação de estado.
Conclusão
React, Vue e Angular são poderosos para a componentização, cada um com suas vantagens específicas. React é flexível e simples, ideal para projetos rápidos. Vue combina a simplicidade do React com uma estrutura mais organizada. Angular é robusto, perfeito para grandes aplicações empresariais. Escolher o framework certo depende das necessidades do seu projeto e da sua equipe.