自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

React Native V0.74 穩(wěn)定版發(fā)布

開發(fā) 前端
React Native 最近有個(gè)令人興奮的消息——V0.74 版本在幾天前發(fā)布了,包含了超過1600個(gè)提交。React Native 版本 0.74 在組件布局、架構(gòu)、批量 onLayout 更新和與 Yarn 3 的集成方面引入了重要改進(jìn)。

React Native 最近有個(gè)令人興奮的消息——V0.74 版本在幾天前發(fā)布了,包含了超過1600個(gè)提交。亮點(diǎn)如下:

  • Yoga 3.0
  • 新架構(gòu):默認(rèn)無橋模式
  • 新架構(gòu):批量 onLayout 更新
  • 新項(xiàng)目使用 Yarn 3

下面我們深入了解每個(gè)新亮點(diǎn)。

Yoga 3.0

首先了解一下 React Native 中的 Yoga 是什么。

Yoga —— 布局引擎

Yoga 是一個(gè)由 Meta 開發(fā)的開源布局引擎。它負(fù)責(zé)在用戶界面內(nèi)排列和定位 UI 元素(如按鈕、文本、圖像等)。

Yoga 為每個(gè) UI 元素計(jì)算以下四個(gè)方面:

  • 定位
  • 尺寸
  • 對(duì)齊
  • 間距

通過 Yoga,你可以創(chuàng)建響應(yīng)式布局,適應(yīng)不同的屏幕尺寸和方向。它還在 React Native 中實(shí)現(xiàn)了一個(gè)廣泛使用的概念——CSS Flexbox。因此,Yoga 可以說是 React Native 靈活 UI 的核心。

Yoga 3.0 —— 新特性

在之前的所有 React Native 版本中,存在一些不正確的布局行為。Yoga 3 解決了這些問題。其中一個(gè)最常見的問題是 ‘row-reverse’ 樣式無法正常工作。

來看下圖,左邊是 V0.73,右邊是 V0.74。

在上圖中,我們有一個(gè) <Container />,內(nèi)部是一個(gè) <Parent /> 組件,再內(nèi)部是兩個(gè) <Child /> 組件。

我們?cè)?nbsp;<Parent /> 組件中應(yīng)用了如下樣式:

// <Parent /> 組件的樣式
style={{
      flexDirection: 'row-reverse',
      backgroundColor: 'dodgerblue',
      flex: 1,
      marginLeft: 100,
      marginRight: 20,
      marginVertical: 20,
      alignItems: 'center'
}}

你注意到了嗎,我們?yōu)?nbsp;<Parent /> 添加了 100 像素的 marginLeft?是的,但看下 React Native V0.73(左邊)的輸出。它顯示右邊有 100 像素的邊距(而不是左邊)??!現(xiàn)在看下 React Native V0.74(右邊)的輸出。很好,在 V0.74 中,我們看到左邊有了完美的 100 像素邊距,并且兩個(gè) <Child /> 組件也被反轉(zhuǎn)了 ??。

所以,在 Yoga-2 中,如果你在組件上應(yīng)用了 ‘row-reverse’ 的 flex-direction 以及 “margin” 或 “padding” 或 “border”,那么該組件的邊緣也會(huì)被翻轉(zhuǎn)。但在 Yoga-3 中,這個(gè)問題已經(jīng)完美解決了 ??。

Yoga-3 還帶來了一些 Yoga-2 中缺失的重要樣式組件:

  • alignContent 樣式的 space-evenly 屬性。
  • position 樣式的 static 屬性。

新架構(gòu):默認(rèn)無橋模式

舊架構(gòu)

React Native 以前使用橋來在 JavaScript 和原生模塊之間通信。這些模塊用 C++、Objective C、Java 或 Kotlin 編寫,以訪問攝像頭、傳感器等原生功能。不幸的是,橋有一些限制。

一個(gè)主要限制是,每次一個(gè)層與另一個(gè)層通信時(shí),都涉及序列化(將 JS 對(duì)象轉(zhuǎn)換為 JSON 字符串)和反序列化(將 JSON 字符串轉(zhuǎn)換回 JS 對(duì)象)數(shù)據(jù)。由于轉(zhuǎn)換需要時(shí)間,這個(gè)過程會(huì)給通信流程帶來性能問題。

新架構(gòu)——性能提升

好消息是,React Native 團(tuán)隊(duì)能夠用一個(gè)叫做 JSI(JavaScript 接口)的接口替換橋。它用 C++ 編寫,使所有原生功能都可以通過你的 JS 代碼訪問,這意味著你可以調(diào)用原生方法而無需數(shù)據(jù)序列化或反序列化,使應(yīng)用程序超級(jí)快速。

移除舊架構(gòu)依賴

JSI 是新架構(gòu)的核心部分。為了在我們的應(yīng)用程序中充分啟用 JSI(新架構(gòu)),我們需要先移除應(yīng)用程序?qū)εf橋架構(gòu)的依賴。為此,React Native 團(tuán)隊(duì)引入了新架構(gòu)的三個(gè)支柱,使我們能夠完全擺脫對(duì)橋的依賴。

  • TurboModules:移除了應(yīng)用程序?qū)蛑性{(diào)用的依賴(在 V0.68 中發(fā)布)。
  • Fabric Renderer:移除了應(yīng)用程序?qū)蛑薪M件渲染的依賴(在 V0.68 中發(fā)布)。
  • Bridgeless Mode:移除了應(yīng)用程序?qū)蛑衅渌糠郑ㄈ珏e(cuò)誤處理、全局事件發(fā)射器、計(jì)時(shí)器等)的依賴(在 V0.73 中發(fā)布)。

V0.74 中的新特性

從 V0.74 開始,一旦你啟用了新架構(gòu),你會(huì)看到“無橋模式”已自動(dòng)啟用。然而,新架構(gòu)本身默認(rèn)仍未啟用。

當(dāng)你在 V0.74 中啟用新架構(gòu)時(shí),你會(huì)在 Metro 日志中看到如下兩行:

這就對(duì)了 ??。從 React Native V0.74 開始,啟用新架構(gòu)后,無需手動(dòng)啟用無橋模式 ??。

新架構(gòu):批量 onLayout 更新

另一個(gè)好消息是,React Native 團(tuán)隊(duì)不僅將新架構(gòu)的無橋模式設(shè)為默認(rèn),還改進(jìn)了此架構(gòu),以處理批量 onLayout 更新(在單個(gè)渲染中執(zhí)行多個(gè)更新)。這種優(yōu)化通過減少渲染期間的布局相關(guān)計(jì)算來提高性能。

“onLayout” 屬性

React Native 中的 onLayout 屬性用于處理組件的布局(位置)變化。當(dāng)組件的布局發(fā)生變化(由于掛載、調(diào)整大小、旋轉(zhuǎn)或其他因素)時(shí),onLayout 回調(diào)函數(shù)會(huì)被觸發(fā)。

你可以像下面這樣使用這個(gè)屬性,根據(jù)更新的布局信息執(zhí)行操作。

function App(){
  return (
      <View
         notallow={() => {
          console.log('Component has been invoked ??')
         }}
      />
   )
}
“onLayout” 批量更新如何工作?

假設(shè)組件 <App/> 如下所示,每個(gè) View 在掛載時(shí)觸發(fā) onLayout 回調(diào)函數(shù)。

function App() {
 const [state1, setState1] = useState(false)
 const [state2, setState2] = useState(false)
 const [state3, setState3] = useState(false)

 console.log('? COMPONENT RE-RENDERED .....')

 return (
  <View>
   <View
    notallow={() => {
     console.log('FIRST View invoked')
     setState1(true) // View 掛載時(shí)更新 state1
    }}></View>

   <View
    notallow={() => {
     console.log('SECOND View invoked')
     setState2(true) // View 掛載時(shí)更新 state2
    }}></View>

   <View
    notallow={() => {
     console.log('THIRD View invoked')
     setState3(true) // View 掛載時(shí)更新 state3
    }}></View>
  </View>
 )
}

現(xiàn)在,在 React Native V0.73 中,你會(huì)看到如下輸出 ??。

每次執(zhí)行 onLayout 回調(diào)時(shí)都會(huì)重新渲染整個(gè)組件。

在 React Native V0.74 中啟用新架構(gòu)后的輸出 ??。

性能驚人??。在執(zhí)行所有 3 個(gè) “onLayout” 回調(diào)時(shí),組件只重新渲染了一次。

關(guān)于 “onLayout” 批量更新的總結(jié)如下圖 ??。

新項(xiàng)目使用 Yarn 3

Yarn 3 現(xiàn)在是通過 React Native Community CLI 初始化的新項(xiàng)目的默認(rèn) JavaScript 包管理器。它取代了已被棄用且之前用作默認(rèn)的 Yarn Classic(1.x)。

Yarn 3 加快了安裝和更新依賴項(xiàng)的過程,并優(yōu)化了依賴項(xiàng)的存儲(chǔ)方式。

結(jié)論

React Native 版本 0.74 在組件布局、架構(gòu)、批量 onLayout 更新和與 Yarn 3 的集成方面引入了重要改進(jìn)。

責(zé)任編輯:姜華 來源: 大遷世界
相關(guān)推薦

2013-08-21 10:18:34

Chrome 29

2013-12-13 13:32:50

FirefoxFirefox 26

2021-10-23 17:12:34

MX LinuxLinux

2011-04-15 10:37:27

2009-12-04 09:55:55

Linux內(nèi)核Linux

2010-04-27 09:07:08

2013-05-22 15:02:13

Zend Framew

2011-11-08 10:53:02

Node.js

2011-12-05 09:39:57

Node.js

2022-12-05 13:29:38

4MLinux編程語言Linux

2009-03-25 16:29:26

LinuxKernel 2.6.穩(wěn)定版

2012-07-12 10:15:15

Node.js

2010-10-21 09:08:56

2012-08-01 13:35:58

Chrome 21

2012-10-31 10:19:37

2011-04-12 21:47:02

nginx 1.0.0

2009-03-04 08:54:38

新版升級(jí)MySQL

2009-03-24 14:45:16

LinuxKernel穩(wěn)定版2.6.29

2009-06-11 14:41:40

LinuxKernel發(fā)布

2009-06-11 11:08:29

LinuxKernel內(nèi)核
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)