Angular vs React: Chọn cái nào cho ứng dụng của bạn

So sánh song song chính xác các khía cạnh chung và kỹ thuật của Angular và React

Có rất nhiều bài báo có tiêu đề “Angular vs React”, “React vs Angular”, “Angular or React” - bạn đã mở được bài này thật là một điều kỳ diệu! Tuy nhiên, những gì các bài viết này còn thiếu là một so sánh song song chính xác giữa Angular và React.

Vì vậy, đây là những gì tôi sẽ làm trong bài đăng trên blog này: đặt React và Angular ở vị trí cạnh nhau trực tiếp. Chúng tôi sẽ xem xét và đối chiếu hai khung JavaScript và xem xét từng đặc điểm có thể có để đảm bảo rằng chúng tôi không bỏ lỡ dù chỉ một phần dữ liệu.

Cuối cùng, tôi sẽ không cho bạn biết nên chọn công nghệ nào. Nhưng tôi sẽ cung cấp cho bạn đủ thức ăn để suy nghĩ để bạn chọn công nghệ phù hợp nhất với bạn và dự án của bạn.

tìm kiếm (1)

1. Tổng quan ngắn gọn

Phản ứng

React là một thư viện JavaScript để phát triển giao diện người dùng. Nó được quản lý bởi Facebook và một cộng đồng các nhà phát triển nguồn mở.

Khung được giới thiệu vào tháng 5 năm 2013.

Các bản cập nhật mới nhất đã được phát hành vào ngày 8 tháng 8 năm 2019 - chỉ hơn một tháng trước.

Angular

Angular là một khung JavaScript mã nguồn mở để phát triển web và di động. Nó dựa trên TypeScript và được quản lý bởi Nhóm Angular của Google và cộng đồng nhà phát triển Angular.

Ra mắt vào tháng 9 năm 2016, Angular (còn được gọi là Angular 2.0) là bản viết lại hoàn chỉnh của AngularJS (Angular 1.0), được giới thiệu vào năm 2010.

Đã có sáu phiên bản của Angular và bản phát hành mới nhất diễn ra vào ngày 28 tháng 8 năm 2019 - gần ba tuần trước.

internet (1)

2. Tính phổ quát

Phản ứng

React là một khuôn khổ được sử dụng trong cả phát triển web và di động. Tuy nhiên, để phát triển di động, nó cần được kết hợp với Cordova. Hơn nữa, để phát triển di động, có một khuôn khổ bổ sung - React Native.

React có thể được sử dụng để xây dựng cả ứng dụng web một trang và nhiều trang.

Angular

Angular phù hợp cho cả phát triển web và di động. Tuy nhiên, trong lĩnh vực phát triển di động, phần lớn công việc được thực hiện bởi Ionic. Hơn nữa, tương tự như React, Angular có thêm một khung phát triển di động. Bản sao của React Native là NativeScript.

Angular cũng có thể được sử dụng cho cả ứng dụng web một trang và nhiều trang.

thành công (1)

3. Tự túc

Phản ứng

React là một khuôn khổ để phát triển giao diện người dùng, vì vậy các ứng dụng được viết bằng React cần có thêm thư viện để sử dụng. Ví dụ: Redux, React Router hoặc Helmet tối ưu hóa các quy trình quản lý trạng thái, định tuyến và tương tác với API. Các chức năng như liên kết dữ liệu, định tuyến dựa trên thành phần, tạo dự án, xác thực biểu mẫu hoặc chèn phụ thuộc yêu cầu phải cài đặt thêm các mô-đun hoặc thư viện.

Angular

Angular là một khung chính thức để phát triển phần mềm, thường không yêu cầu thư viện bổ sung. Tất cả các chức năng được đề cập ở trên - liên kết dữ liệu, định tuyến dựa trên thành phần, tạo dự án, xác thực biểu mẫu và chèn phụ thuộc - có thể được thực hiện với phương tiện của gói Angular.

mở sách

4. Đường cong học tập

Phản ứng

React là tối giản: không chèn phụ thuộc, không có khuôn mẫu cổ điển, không có tính năng quá phức tạp. Khung này sẽ khá đơn giản để hiểu nếu bạn đã biết rõ về JavaScript.

Tuy nhiên, phải mất khá nhiều thời gian để học cách thiết lập một dự án vì không có cấu trúc dự án được xác định trước. Bạn cũng cần tìm hiểu thư viện Redux, được sử dụng trong hơn một nửa số ứng dụng React để quản lý trạng thái. Các bản cập nhật khung liên tục cũng yêu cầu nỗ lực bổ sung từ nhà phát triển. Hơn nữa, có khá nhiều phương pháp hay nhất trong React mà bạn sẽ cần học để làm đúng.

Angular

Bản thân Angular là một thư viện khổng lồ và việc học tất cả các khái niệm liên quan đến nó sẽ mất nhiều thời gian hơn so với trường hợp của React. Angular phức tạp hơn để hiểu, có rất nhiều cú pháp không cần thiết và việc quản lý thành phần cũng phức tạp. Một số tính năng phức tạp được nhúng vào lõi khung, có nghĩa là nhà phát triển không thể tránh khỏi việc học và sử dụng chúng. Hơn nữa, có rất nhiều cách để giải quyết một vấn đề.

Mặc dù TypeScript gần giống với JavaScript, nhưng cũng cần một thời gian để tìm hiểu. Vì khung được cập nhật liên tục, nhà phát triển cần phải nỗ lực học hỏi thêm.

người dùng (1)

5. Cộng đồng

Phản ứng

React framework là một trong những framework JS phổ biến nhất trên toàn thế giới và cộng đồng hỗ trợ và phát triển nó là rất lớn.

Working with React, you have to be a continuous learner since the framework is often updated. While the community tries to go forward with the latest documentation as swiftly as possible, keeping up with all the changes is not that easy. Sometimes, there may be a lack of documentation, but the issue is often solved by the community support on thematic forums.

React is actively used by such companies as Facebook, Twitter, Netflix, Airbnb, PayPal, The New York Times, Yahoo, Walmart, Uber, and Microsoft.

Angular

Angular is less admired than React and faces a lot of skepticism, partially because of the unpopularity of Angular 1.0. Developers used to dismiss the framework as an overly complicated one as it required a lot of time to be spent learning. However, this framework has been developed by Google, which works in favor of Angular’s credibility.

Google provides the long-term support of the framework and constantly improves it. However, the updates are so fast that the documentation often falls behind.

Angular is used by such companies as McDonald’s, AT&T, HBO, Apple, Forbes, Adobe, Nike, and Microsoft as well.

cài đặt (1)

6. Performance

React

React’s performance is greatly improved with the introduction of the virtual DOM. Since all virtual DOM trees are lightweight and built on server, the load on browser is reduced. Furthermore, since the data-binding process is unidirectional, bindings are not assigned watchers as in the case of Angular. Respectively, no additional workload is created.

Angular

Angular performs worse, especially in the case of complex and dynamic web apps.

The performance of Angular apps is negatively affected by bidirectional data-binding. Each binding is assigned a watcher to track changes, and each loop continues until all the watchers and associated values are checked. Because of this, the more bindings you have, the more watchers are created, and the more cumbersome the process becomes.

However, the most recent update of Angular has greatly improved its performance, and it does not lose to React anymore. Moreover, the size of an Angular application is slightly smaller than the size of a React app.

menu (1)

7. Language

React

React is based on JavaScript ES6+ combined with JSX script. JSX is an extension for syntax, which makes a JavaScript code resemble that written in HTML. This makes the code easier to understand, and typos are easier to spot. For the JSX code to be compiled in a browser, React is augmented with Babel – a code translation tool.

Angular

Angular can use JavaScript or TypeScript, which is a superset of JS developed specifically for larger projects. TypeScript is more compact than JavaScript, the code is easier to navigate, and typos are easily spotted. Code refactoring process also becomes simpler and faster.

lớp (2)

8. App Structure

React

The structure of React provides developers with the freedom to choose. There is no “the only right structure” for a React app. However, the necessity to design the app structure at the beginning of each project makes it more difficult and longer to start.

Besides, React offers only View layer, while Model and Controller are added with the usage of other libraries.

The architecture of a React app is component-based. The code is made of React components, which are rendered with React DOM library and directed in two ways: functional (with a function that returns JSX)...

function Hello(props){ return Hello {props.name} }

...and class-based (with ES6 classes).

class Hello extends React.Component { render() { return 

Hello, {this.props.name}

; }

Angular

The structure of Angular is fixed and complex, suitable for experienced developers.

Angular is based on three layers – Model, Controller, and View. An object responsible for the Model is initialized by the Controller and displayed with the View.

The application code consists of different Angular components, each being written in four separate files: a TypeScript to implement the component, an HTML file to define the view, a CSS file to define the stylistic features, and a special file for testing purposes. Links to these files are written in the app directive, which displays the structural logic of the app. Respectively, Angular components are also reusable.

import { Component } from '@angular/core'; @Component({ selector: 'my-app', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { }
ứng dụng (1)

9. UI Components

React

UI tools for React are developed by the community. There are a lot of free and paid UI components on the React portal. To use material design components in React, you would have to install an additional library – Material-UI Library & Dependencies.

Angular

Angular has a built-in Material toolset, and it offers a variety of pre-built material design components. There are various buttons, layouts, indicators, pop-ups, and form controls. Because of this, UI configuration becomes simpler and faster.

tập tin (1)

10. Directives

React

In React, templates and logic are explained in one place – at the end of the component. It allows the reader to quickly grasp the meaning of the code even if they do not know the syntax.

Angular

In Angular, each template is returned with an attribute – a directive of how the object has to be set. The syntax of Angular directives is complex and sophisticated, which makes it incomprehensible for a reader without any experience in working with this technology.

điều khiển (1)

11. State Management

React

In React, each component has its own state. A React developer can create special components for holding the state of the entire application or a particular part of it. The major disadvantage here consists in the fact that the global state needs to be stored in multiple different parts of the app with data being manually passed around different component tree levels.

class Clock extends React.Component { constructor(props) { super(props); this.state = {date: new Date()}; } render() { return ( 

Hello world!

Now is {this.state.date.toLocaleTimeString()}.

); } }

To solve this problem, there is a special state management library – Redux. The idea of it is that the global state is represented as a single stateful object, which is altered in different parts of the app with the help of reducers – special Redux functions.

Another solution is offered by the state management library MobX. Unlike Redux with the global state stored in a single immutable stateful object, MobX offers storing only the minimal required state, while the rest of it can be derived.

Angular

In Angular, component data is stored in component properties. Parent components pass data through to children ones. State changes in some parts can be identified and recalculated, but in a large app, it can cause a multi-directional tree series of updates, which will be difficult to track. The features can be improved with the help of state management libraries, such as NgRx or RxJS , which would make sure that the data flow is unidirectional.

export class HeroListComponent implements OnInit { heroes: Hero[]; selectedHero: Hero; constructor(private service: HeroService) { } ngOnInit() { this.heroes = this.service.getHeroes(); } selectHero(hero: Hero) { this.selectedHero = hero; } } 
mạng (1)

12. Dependency Injection

React

React does not fully support dependency injection as it does not fully comply with the idea of functional programming and data immutability. Instead, it has a global state for all components.

Angular

The greatest advantage of Angular rests in the fact that, unlike React, it supports dependency injection. Therefore, Angular allows having different lifecycles for different stores.

import { Injectable } from '@angular/core'; import { HEROES } from './mock-heroes'; @Injectable({ // we declare that this service should be created // by the root application injector. providedIn: 'root', }) export class HeroService { getHeroes() { return HEROES; } }
hủy liên kết (1)

13. Data Binding

React

Data binding stands for the data synchronization process between Model and View. React should be augmented with Redux, which allows you to work with immutable data and makes data flow unidirectional. Unidirectional binding is predictable, which facilitates the debugging process.

Angular

Angular works with bidirectional data-binding and mutable data. While the advantages of mutable and immutable data are a matter of a heated discussion, it is definitely easier to work with bidirectional data-binding rather than with the unidirectional approach. At the same time, bidirectional data-binding negatively affects the performance since Angular automatically develops a watcher for each binding.

The ways of data-binding in Angular:

{{expression}} Interpolation [target]="expression" Property bind-target="expression" Attribute
(target)="statement" Event on-target="statement" Event
[(target)]="expression" Two-way bindon-target="expression" Two-way
xáo trộn (1)

14. Change Rendering

React

React uses a virtual Document Object Model (DOM), which enables easily implementing minor data changes in one element without updating the structure of the entire tree. The framework creates an in-memory cache of data structure, computes the changes, and efficiently updates the DOM displayed in the browser. This way, the entire page seems to be rendered on each change, whereas actually, the libraries render changed subcomponents only.

The React team is constantly improving Fiber – a mechanism aimed at boosting the productivity of change rendering.

Angular

Angular uses a real DOM, which updates the entire tree structure even when the changes have taken place in a single element. The real DOM is considered to be slower and less effective than the virtual DOM.

To compensate for this disadvantage, Angular uses change detection to identify components that need to be altered. Therefore, the real DOM on Angular performs as effectively as the virtual DOM on React.

chỉnh sửa (1)

15. Tools

React

React is supported by multiple code editors. For instance, the code in React can be edited with Sublime Text, Visual Studio, and Atom. To bootstrap a project, you can use the Create React App (CLI) tool. In turn, server-side rendering is completed with the use of Next.js framework.

To test the entire app written in React, you would need multiple tools. For instance, Enzyme for component testing, Jest for testing JS code, React-unit for unit testing and so on. To debug the app in the development mode, you can use a browser extension React Dev Tools.

Another interesting tool is React 360, which is a library used for creating AR and VR applications.

Angular

Similarly to React, Angular is supported by a variety of code editing tools. For example, you may work with such code editors as Aptana, Sublime Text, and Visual Studio. A project can be promptly set up with Angular CLI. Server-side rendering is completed with the help of Angular Universal.

Unlike React, Angular can be fully tested with a single tool. For the end-to-end testing in Angular, the platforms are Jasmine, Protractor, and Karma. Another tool that debugs the app in the development mode is a browser extension Augury.

To Wrap Up

Angular is a full-fledged mobile and web development framework. React is a framework only for UI development, which can be turned into a full-fledged solution with the help of additional libraries.

React seems simpler at first sight, and it takes less time to start working on a React project. However, that simplicity as the main advantage of React is neutralized because you have to learn to work with additional JavaScript frameworks and tools.

Angular itself is more complex and takes quite some time to master. Yet, it is a powerful tool that offers a holistic web development experience, and once you learn how to work with it, you reap the fruits.

There is no better framework. Both are updated continuously to keep up with the competitor. For instance, while React was believed to win because of its virtual DOM, Angular equaled the score by implementing change detection. While Angular was considered to be winning because of being developed by such an authoritative company as Google, the immense devoted React community fully compensated for Google's reputation and made React similar to Angular.

In the end, React vs Angular is all a matter of personal preference, a matter of skills and habits. As a beginner in programming, you would probably benefit more from starting with React. As an experienced developer, you just keep working with what you know better.

Do not forget to challenge yourself and start learning a new framework, React or Angular. As a Project Manager or a business owner outsourcing developers, you should talk to your web development team and together choose the framework that suits all of you best, whether it be Angular or React.

Do you have an idea for either an Angular or React project?

My company KeenEthics is experienced in react development, and we, also, provide outstanding agularjs developers for your projects. In case you need the following services, feel free to get in touch.

If you have enjoyed the article, you should definitely read another wonderful comparison of 2 JS frameworks: React vs Svelte: How to Build Messaging Components.

P.S.

Tôi muốn gửi lời cảm ơn đến tất cả những người đã đóng góp cho bài viết này, bao gồm cả Sergey Gornostaev và Volodya Andrushchak, các nhà phát triển phần mềm full-stack @ KeenEthics.

Bạn có thể tìm thấy bài viết gốc được đăng trên blog KeenEthics tại đây: Angular vs React: Chọn cái nào cho ứng dụng của bạn.