React Native 0.80 發布:API 穩定性、TypeScript 支持與性能優化
React Native 0.80 正式發布,帶來了一系列以API穩定性、TypeScript支持、性能優化為重點的改進,并持續推進舊架構的淘汰工作。本次發布還實現了與React 19.1.0的版本同步,確保框架與核心React生態保持步調一致。
JavaScript深度導入棄用
為穩定React Native的公共JavaScript API,正式棄用了深度導入方式。開發者現在通過ESLint和JS控制臺會收到子路徑導入的警告,官方強烈建議遷移至根路徑導入。這一變更旨在縮減API的整體暴露范圍。對于當前未在根層級導出的API,已開放專門的反饋討論區。
// ? 已棄用
import {Alert} from 'react-native/Libraries/Alert/Alert';
// ? 推薦方式
import {Alert} from 'react-native';
可選嚴格TypeScript API
新增的可選嚴格TypeScript API直接從React Native源碼生成,確保了更高的類型準確性。這些類型限定在React Native的索引文件中,有助于定義更嚴格的公共API邊界,避免內部文件修改導致的破壞性變更。該嚴格API展現了未來穩定版JavaScript API的雛形,特別推薦早期采用者和新項目使用。
舊架構凍結與警告機制
React Native的舊架構正式進入凍結狀態,這意味著不再為其開發新功能或修復bug,版本發布時也不再進行測試。雖然仍可選擇退出新架構以規避某些問題,但React Native DevTools現在會標記與新架構不兼容的API并發出警告。這一關鍵舉措為最終淘汰舊架構鋪平了道路,屆時將顯著提升運行時性能、減小應用體積并簡化代碼庫維護。
React 19.1.0集成
React Native 0.80內置了React生態最新穩定版19.1.0,包含多項新特性和問題修復。需注意的是,當使用@babel/plugin-transform-function-name
插件時,React 19.1.0專為開發環境設計的組件錯誤追蹤功能(owner stacks)在React Native中暫無法正常工作,該問題將在后續版本中修復。
平臺優化與其他變更
除核心框架更新外,本次發布還針對iOS和Android平臺帶來了多項改進。
實驗性功能 - iOS依賴預構建
長期以來,初始構建耗時一直是React Native iOS開發的痛點。0.80版本引入的實驗性功能允許使用預構建的第三方依賴,基準測試顯示在M4芯片設備上初始構建時間可縮短達12%。Meta為此提供了包含Folly、GLog等易出問題庫的預編譯框架ReactNativeDependencies.xcframework
。
啟用方式(任選其一):
RCT_USE_RN_DEP=1 bundle exec pod install
或在Podfile中添加:
ENV['RCT_USE_RN_DEP'] = '1'
Android - IPO優化減小APK體積
通過為React Native和Hermes構建啟用過程間優化(IPO),0.80版本生成的Android應用APK體積可減少約1MB,且無需額外配置。
新建應用界面重構
對于使用社區CLI模板(非Expo)的開發者,新建應用界面已重構為獨立模塊并采用現代化設計,既減少了初始樣板代碼,也優化了大屏設備的顯示效果。
JSC支持變更說明
0.80是最后一個提供官方JavaScriptCore(JSC)支持的版本,后續支持將轉由社區包@react-native-community/javascriptcore
維護。
重大變更
主包新增"exports"字段
作為JS穩定API改進的一部分,react-native
的package.json中新增了"exports"
字段。需注意:
- Metro打包器下平臺特定擴展名不再自動匹配
"exports"
規則(已提供墊片模塊解決) - Jest的深度導入mock機制可能受影響,測試代碼可能需要調整
JavaScript變更
eslint-plugin-react-hooks
從v4.6.0升級至v5.2.0,可能觸發新的React hooks規則校驗,開發者需相應調整或禁用相關規則。
Android變更
- 內置Kotlin版本升級至2.1.20(支持新語言特性)
- 移除自0.73起廢棄的
StandardCharsets
類(改用java.nio.charset.StandardCharsets
) - 內部化多個Android類(包括Fabric狀態管理、動畫調度等核心模塊)
- 大量Java類遷移至Kotlin(涉及開發支持、文本輸入等模塊),需注意可空性和參數類型變化
iOS變更
刪除RCTUtils.h
中未使用的RCTFloorPixelValue
字段。
原文地址:https://medium.com/@onix_react/release-react-native-0-80-b6ae000c193c
作者:Onix React團隊