JuniorKỹ thuậtReact Native
React Native giao tiếp với code native như thế nào?
Thử trả lời trước
Đáp án mẫu
React Native chạy JavaScript của bạn trong một JS engine (mặc định là Hermes) và render view native thật, không phải web view.
Trong kiến trúc cũ, JS và native giao tiếp qua một bridge bất đồng bộ, serialize thông điệp thành JSON. Điều này gây thêm chi phí và không cho phép gọi đồng bộ.
Kiến trúc mới thay thế bridge bằng:
- JSI (JavaScript Interface) cho phép JS giữ tham chiếu trực tiếp tới đối tượng native và gọi chúng, kể cả đồng bộ.
- TurboModules là các module native được nạp lười và có kiểu qua một spec, rồi codegen sinh ra interface native.
- Fabric là bộ render mới. Nó có thể đọc layout đồng bộ và hỗ trợ các tính năng concurrent.
Để cung cấp chức năng native, bạn viết một TurboModule hoặc native component bằng Swift/Kotlin hoặc Objective-C/Java rồi gọi từ JS. Hầu hết ứng dụng dùng thư viện có sẵn, nhưng hiểu cơ chế này giúp ích khi debug hiệu năng hoặc viết module riêng.
Ý chính
- JavaScript chạy trong một engine như Hermes và render view native thật
- Bridge cũ là bất đồng bộ và serialize bằng JSON
- JSI cho phép gọi trực tiếp, kể cả đồng bộ, giữa JS và native
- TurboModules và Fabric được xây dựng trên JSI
Câu hỏi nối tiếp thường gặp
- Codegen được dùng để làm gì trong kiến trúc mới?
- Khi nào bạn viết một native module riêng?
Lỗi thường gặp
- Nói rằng React Native render HTML trong web view
- Gửi dữ liệu lớn qua ranh giới JS/native ở mỗi frame