React Native là gì? Ưu và nhược điểm của React Native

React Native –  là công nghệ được tạo bởi Facebook, cho phép các dev sử dụng JavaScript để làm mobile apps trên cả Android và iOS với mượt mà như native.

Cách đây 2 năm, tôi chỉ tập trung vào lập trình Android native. Nhưng đến năm ngoái, khi công ty yêu cầu tôi học lập trình iOS, tôi đã khá phấn khích lúc đầu, nhưng sự phấn kích đó nhanh chóng phai nhạt dần, năng suất làm việc của tôi cũng suy giảm đi. Tôi nhận ra, mình phải học lại từ đầu tất cả mọi thứ như framework, các công cụ, IDE…

Và vì tôi rất thích đến các buổi meetup nên tôi cũng bắt đầu tham dự các buổi meetups của cả Android và iOS. Tôi cần phải cập nhật với những tính năng mới nhất trên cả 2 platforms, nên rất tốn thời gian và khó chịu khi khả năng học của tôi không nhanh. Vì vậy, tôi đã rất hứng thú khi React Native dành cho iOS ra đời.

React Native là gì?

React Native là một framework được tạo bởi Facebook, cho phép các lập trình viên sử dụng JavaScript để làm mobile apps trên cả Android và iOS với có trải nghiệm và hiệu năng như native. React Native vượt trội ở chỗ chỉ cần viết một lần là có thể build ứng dụng cho cả iOS lẫn Android.

Việc này giúp chúng ta có thể tiết kiệm được thời gian, công sức, tiền bạc. Giúp tốc độ ra sản phẩm cũng như cập nhật ứng dụng nhanh chóng mặt. Có thể nói React Native là một cross-platform để xây dựng một ứng dụng di động hiệu quả.

Nó hoàn toàn khác với khái niệm “hybrid app” :

Hybrid App là sự kết hợp giữa ứng dụng Web và ứng dụng mobile. Hybrid app được xây dựng dựa trên HTML + CSS + JS và được đóng gói load bên trong một ứng dụng mobile thông qua một native container gọi là Webview. Hybrid có thể truy cập vào hầu hết các chức năng thuộc phần cứng của điện thoại di động bao gồm máy ảnh, danh bạ, cảm biến gia tốc, âm thanh… Nhược điểm của Hybrid App đó chính là vấn đề hiệu năng (tốc độ chậm, giao diện không thân thiện…) sẽ bị ảnh hưởng đáng kể cũng như không tương tác được hết những tài nguyên của điện thoại thông mình.

 

React Native

Những ưu điểm của React Native

React Native cùng với Flutter đang là xu hướng lập trình di động hiện nay bởi tính đa nền tảng cũng như tiết kiệm thời gian triển khai dự án. Sau đây là những lợi ích mà nó đem lại cho việc triển khai dự án và bạn có thể trả lời cho câu hỏi có nên dùng React Native không ?

1. Thời gian học ngắn hơn

  11 Thư viện React Native Component bạn nên biết
  25 Tips cho React Native lập trình viên phải biết

Một lý do lập trình mobile app rất khó và tốn thời gian là vì thực tế bạn cần tìm hiểu 2 hệ sinh thái hoàn toàn khác biệt. Nếu bạn muốn lập trình app iOS, bạn phải học Swift hoặc Objective-C và Cocoa Pods.

Nếu muốn lập trình app Android, bạn cần học Java hoặc Kotlin và Android SDK. Tôi từng viết code với 3 ngôn ngữ là Swift, Objective C, Java và không thực sự hứng thú với việc tranh luận ngôn ngữ nào tốt hơn.

Tuy nhiên, điều tôi có thể nói là chúng khác nhau và việc học từng ngôn ngữ đó sẽ tốn khá nhiều thời gian. Điều tương tự cũng xảy ra với các frameworks: Cocoa Touch và Android SDK.

Tất nhiên, mỗi frameworks luôn có 1 gói các công cụ như công cụ testing, các libs, packages… và việc các dev phải cập nhật các tính năng mới nhất của mỗi hệ sinh thái là điều không thể bàn cãi.

Mặc khác, nếu bạn chọn lập trình trên React Native, phần lớn thời gian bạn sẽ chỉ cần học 1 bộ công cụ. Có rất nhiều thứ để bạn làm quen như: JavaScript, Node, React Native… nhưng chỉ có 1 công cụ duy nhất để học.

2. Khả năng tái sử dụng code

Khả năng sử dụng lại code đóng vai trò quan trọng trong lập trình phần mềm, nên mỗi khi bạn có thể sử dụng lại code thì React Native là công cụ tốt.

React Native không phải chỉ viết 1 lần mà nó chạy ở mọi nơi. Bất cứ khi nào bạn lập trình 1 app, bạn cần phải xây dựng UI trông native và phù hợp với hệ điều hành bạn hướng tới. Vì lý do này, 1 số UI code cần được viết theo đúng các chỉ dẫn và chuẩn mực tốt nhất của platform đó.

Tuy nhiên, sẽ luôn có vài UI code thông dụng có thể được chia sẻ chung với nhau cùng tất cả logic. Tính năng “có thể chia sẻ code” có rất nhiều lợi điểm như: tận dụng nguồn nhân lực tốt hơn, duy trì ít code hơn, ít bugs hơn, các tính năng trong cả 2 platforms cũng tương tự nhau…

React Native

3. Học 1 lần, viết ở mọi nơi

Khi team của Facebook tạo React Native, mục tiêu của họ là giúp các dev học 1 lần nhưng sử dụng được mọi platform. Bởi vì tất cả code của Android và iOS sử dụng cùng bộ công cụ, nên ý tưởng có một team dev làm app cho cả hai platform là thực hiện được – một điều ít khi xảy ra khi có rất ít dev lập trình cả hai platform iOS và Android.

Thậm chí, tôi còn cho rằng team đang lập trình web app sử dụng React.js sẽ không phải cực khổ nữa khi học lập trình React Native và bắt đầu làm mobile app.

4. Cộng đồng lớn

React Native đang trở lên rất phổ biến, nhiều developer đang đóng góp để làm React Native tốt hơn. Đặc biệt là nó được tạo ra và hỗ trợ bởi tập đoàn Facebook.

React Native Github repro là một nguồn mở và có hàng nghìn cộng tác viên hoạt động rất năng nổ.

  6 cách đơn giản để tăng tốc độ React Native cho bạn
  Flutter chiến với React Native ai ngon hơn?

Cộng đồng rất lớn và đang phát triển mạnh mẽ. Nhiều vấn đề đã và đang được giải quyết và bạn sẽ không cần phải tốn thời gian để nghiên cứu lại trong suốt quá trình học và làm việc với React Native.

5. Hot Reloading

Thói quen thông thường của dev khi code là test các thay đổi mỗi lần code được viết. Để thực hiện được, app cần phải được đóng gói lại và cài đặt hoặc trong 1 simulator hoặc một thiết bị thật sự.

Với React Native, phần lớn thời gian, bạn không cần phải tổng hợp lại app mỗi lần có thay đổi. Bạn chỉ cần làm mới app trong simulator, emulator hoặc thiết bị. Thậm chí còn có một tính năng là Live Reload để tự động refresh app mỗi lần phát hiện 1 thay đổi trong code.

6. Nguồn mở

React Native vẫn còn là công nghệ đang được sử dụng nhiều. Tuy vẫn còn nhiều lỗi, nhưng nhìn chung, các lập trình viên vẫn có thể sử dụng React Native vào giai đoạn production ở hầu hết các mobile app.

Ngoài ra vẫn còn vài tính năng có sẵn trong các lập trình native, chưa sử dụng được với React Native nhưng đây không phải là vấn đề lớn. Từ kinh nghiệm của bản thân, đây chỉ là chuyện đơn giản khi bạn đã quen thuộc với lập trình native.

Thêm nữa, khi React Native đã là nguồn mở, với cộng đồng lớn các lập trình viên đã hỗ trợ thực hiện nhiều tính năng hơn, fix bugs… Phần lớn thời gian, nếu bạn đang cố gắng lập trình 1 thứ gì đó đã quen thuộc trong mobile apps thì nhiều khả năng là nó đã được lập trình rồi.

Như bạn thấy, tôi thực sự rất lạc quan về React Native. Tôi vẫn nhớ lập trình Android và iOS native nhưng đồng thời rất hứng thú khi sử dụng React Native thời gian qua. Tôi nghĩ React Native sẽ là game – changer – kẻ thay đổi cục chơi trong lập trình mobile và khó lòng đợi được cho đến lúc nó trở thành platform không thể bỏ qua để lập trình mobile!

Những nhược điểm của React Native

React Native là một giải pháp tuyệt vời cho phát triển ứng dụng trên điện thoại di động, tuy nhiên đến thời điểm hiện tại, vẫn còn tồn tại một số khuyết điểm:

  1. Vẫn còn thiếu các component quan trọng nhưng dần dần cũng đang có thêm nhiều cập nhật mới kể từ bài viết này mà tôi chưa được biết.
  2. Không build được ứng dụng iOS trên Window và Linux: do yêu cầu từ Apple, mọi ứng dụng iOS cần được sử dụng nhiều native libs, cert…từ Xcode.
  3. React Native không thể build được ứng dụng “quá phức tạp” nếu bạn không biết Swift/Objecive-C, Java – tính phức tạp ở đây là ứng dụng của bạn cần phải chỉnh sửa các component. Để viết được 1 ứng dụng native bằng javascript thì “luôn luôn” có sẵn các component đã được viết từ Swift/Objective-C (iOS) và Java (Android) để bạn sử dụng. Trường hợp bạn muốn chỉnh sửa 1 component nào đó: thay đổi thành phần hoặc thêm API thì bạn phải tự viết bằng chính ngôn ngữ tương ứng của iOS hoặc Android. Nhờ cộng đồng lớn nên cũng có nhiều lập trình viên khác đã viết nhiều component cần thiết cho hầu hết ứng dụng (đây cũng là lý do vì sao Facebook biến React Native thành mã nguồn mở).
  4. Không dùng để viết game có tính đồ họa và cách chơi phức tạp.
  5. Dùng ES2015/ES6 nên đây là cấu trúc mới cho Javascript từ 2015, vì khá là mới nên những cấu trúc của nó có thể bạn chưa quen, dẫn tới việc khó khăn trong việc tiếp cận.

Lộ trình học React Native

Lộ trình này hướng dẫn cả cho người bắt đầu từ đầu. Nếu bạn đã có kinh nghiệm thì có thể kéo xuống để tiếp tục sang các phần tiếp theo.

  1. Kiến thức lập trình web căn bản : Kỹ thuật lập trình, Cơ sở dữ liệu, HTML, CSS, JavaScript…
  2. ES6 và Javascript nâng cao.
  3. Nodejs: Nhiều khái niệm cần biết như:
      • NPM
      • Các lệnh như npm installnpm install - save-devnpm start, …
      • Promises / Callbacks / Async Await
  4. React: cần biết các khái niệm:
    • Components (Class với Functional)
    • Kiểm soát các thành phần
    • Handlers
    • this.setState và this.props trong React
    • Life cycle methods (Một chuỗi các sự kiện xảy ra từ khi thành phần React ra đời cho đến khi nó chết.)
    • Fetch/Axios để gọi APIs
  5. Redux với React
  6. Flexbox: Flexbox rất hữu ích trong việc thiết kế giao diện người dùng và thành phần quan trọng của Lộ trình học React Native.
  7. Một số kiến thức khác nên biết:
    • redux-thunk
    • redux-saga
    • LESS, SASS
    • React hooks
    • TypeScript
    • Proptypes
    • Bất kỳ cơ sở dữ liệu nào để kết nối ứng dụng của bạn, mới học thì tốt nhất là Firebase (đây là một cloud service của Google để xác thực, cơ sở dữ liệu, lưu trữ…)

Có thể bạn muốn xem thêm:

Xem thêm việc làm IT tại TopDev!