React Native 0.71正式版發(fā)布幻枉,Ts成為默認(rèn)開發(fā)語言

2023年1月14日碰声,React Native官方發(fā)布了0.71版本,此版本帶來了很多重磅和突破性的更新熬甫,同時胰挑,感謝70多位貢獻(xiàn)者帶來的了1000多次提交。下面是0.71版本帶來的主要更新內(nèi)容:

  • 默認(rèn)開發(fā)語言為TypeScript
  • 使用Flexbox Gap使布局更加簡單
  • 開發(fā)者體驗提升
  • 有關(guān)新架構(gòu)內(nèi)容的升級
  • 引入的部分web開發(fā)標(biāo)準(zhǔn)的屬性罗珍,樣式及事件
  • 恢復(fù)PropTypes
  • 其他更新

TypeScript成為默認(rèn)開發(fā)語言

從0.71版本開始洽腺,我們將React Native的默認(rèn)開發(fā)語言從JavaScript變成TypeScript,在新建的項目的時候會有所體現(xiàn)覆旱,與此同時項目根目錄會增加一個tsconfig.json文件用于輔助開發(fā)者編寫語法正確的Ts代碼蘸朋。另外0.71版本因本身已支持ts,所以不需要再package.json文件中添加@types/react-native依賴扣唱。

有關(guān)TypeScript藕坯,我們可以將它理解為是增強(qiáng)版JavaScript团南。TypeScript 由微軟開發(fā)的自由和開源的編程語言,是 JavaScript 的一個超集炼彪,支持 ECMAScript 6 標(biāo)準(zhǔn)(ES6 教程)吐根。TypeScript 設(shè)計的初衷就是為了應(yīng)對大型應(yīng)用開發(fā),它可以編譯成純 JavaScript辐马,最終運行在瀏覽器環(huán)境中拷橘。

Flexbox Gap讓布局更加簡單

此版本引入了web開發(fā)標(biāo)準(zhǔn)的屬性gap、rowGap喜爷、columnGap冗疮,使用這些屬性可以很方便的設(shè)置組件間隔。并且檩帐,在未來的版本中术幔,我們還會增加百分比布局。
那gap湃密、rowGap诅挑、columnGap屬性究竟有什么用呢?比如設(shè)置組件之間間隔為margin: 10泛源,其效果如下圖拔妥。

image.png

margin的作用就是用在所有子元素的外邊緣,并且在Flexbox布局中下不會失效达箍,主要用于設(shè)置元素外部的間距毒嫡。同時,我們還可以通過設(shè)置非均勻邊距幻梯、在父元素上使用負(fù)邊距等來使得布局開發(fā)變得更加容易兜畸。

比如,使用gap屬性碘梢,我們還可以在容器上設(shè)置gap: 10來實現(xiàn)卡片內(nèi)部邊距咬摇,如下圖所示:

image.png

如果想要了解更多Flexbox gaps的內(nèi)容,可以參考 blogpost from CSS Tricks煞躬。

Web屬性支持

此版本添加了很多Web屬性的支持肛鹏,使得React Native的api和Web平保持一致,比如 accessibility, behavior和style props等恩沛。這些新屬性都是是附加的在扰,因此對于等效的可訪問性、行為或樣式雷客,不會出現(xiàn)什么異常影響芒珠,比如Image和TextInput組件。

Accessibility

比如搅裙,我們引入ARIA屬性作為React Native的基礎(chǔ)屬性皱卓。事實上裹芝,這些屬性存在我們幾乎所有的React Native組件中,比如aria-label, aria-labelledby,aria-modal, id, aria-busy, aria-checked, aria-disabled, aria-expanded, aria-selected, aria-valuemax, aria-valuemin, aria-valuenow, and aria-valuetext娜汁。

并且嫂易,我們即將在未來的版本中引入其他一些行為屬性,比如aria-hidden, aria-live, role和 tabIndex等掐禁。如果想要了解更多關(guān)于Accessibility的內(nèi)容怜械,可以打開Web Props umbrella issue

Specific Behavior

未來傅事,為了對齊Web標(biāo)準(zhǔn)宫盔,我們還會再基礎(chǔ)組件中引入更多的可訪問性、行為或樣式等屬性享完,比如Image和TextInput組件。

  • Image: alt, tintColor, crossOrigin, height, referrerPolicy, src, srcSet, and width.
  • TextInput: autoComplete, enterKeyHint, inputMode, readOnly, and rows.

Styles

為了與Web平臺的css樣式保持一致有额,我們在React Native中添加了如下的樣式支持般又。

  • aspectRatio:現(xiàn)在支持字符串類型的值
  • fontVariant:現(xiàn)在支持空格分隔的字符串值
  • fontWeight:現(xiàn)在支持?jǐn)?shù)值類型的值
  • transform:現(xiàn)在支持字符串類型的值

同時,以下樣式屬性也被添加到現(xiàn)有React Native樣式中巍佑。

  • objectFit
  • pointerEvents
  • userSelect
  • verticalAlign

想要了解更多的Styles屬性茴迁,可以參考Web Styles umbrella issue

Events

最后萤衰,我們還添加了PointerEvents可選擇項堕义,一旦開啟這一特性,處理View視圖上的以下事件時將支持懸停脆栋。

  • onPointerOver, onPointerOut
  • onPointerEnter, onPointerLeave

當(dāng)然倦卖,上面的事件對于 React Native的Pressability也同樣適用。如果要開啟這一特性椿争,需要將下面的內(nèi)容設(shè)置為true怕膛。

import ReactNativeFeatureFlags from 'react-native/Libraries/ReactNative/ReactNativeFeatureFlags';

// enable the JS-side of the w3c PointerEvent implementation
ReactNativeFeatureFlags.shouldEmitW3CPointerEvents = () => true;

// enable hover events in Pressibility to be backed by the PointerEvent implementation.
// shouldEmitW3CPointerEvents should also be true
ReactNativeFeatureFlags.shouldPressibilityUseW3CPointerEventsForHover =
  () => true;

恢復(fù)PropTypes

React Native的prop,如ViewPropTypes和Text.propTypes秦踪,在0.66版本中被棄用褐捻,如果直接使用它們會輸出過時的警告,并且在0.68版本中我們移除了對prop的支持椅邓,如果在0.68及以上版本中使用它將會遇到錯誤柠逞。

不過,最近的一些調(diào)查讓我們意識到棄用這一特性是錯誤的景馁。首先板壮,棄用警告并不總是可行的,這導(dǎo)致人們忽視了它們(比如issue one合住, issue two) 个束。其次慕购,LogBox.ignoreLogs錯誤地過濾了棄用警告。不過茬底,現(xiàn)在這兩個問題都已經(jīng)得到修復(fù)沪悲。

因此,在這個版本中阱表,我們將重新添加了React Native的propTypes殿如,以便開發(fā)者更容易的升級和遷移代碼。同時最爬,我們在0.71版本中更新了之前棄用的deprecated-react-native-prop-types插件包涉馁。不過,我們?nèi)匀挥媱澰谖磥項売貌h除props爱致。我們期望當(dāng)我們重新移除時烤送,社區(qū)不會出現(xiàn)之前那么多的問題。

開發(fā)者體驗改善

React DevTools

在這個版本中糠悯,我們增加了兩個比較好用的調(diào)試代碼工具帮坚,即點擊元素檢查和組件高亮。 這對于我們開發(fā)中調(diào)試布局頁面來說更加友好互艾,也更加容易讓我們定位組件元素试和,下面是演示圖。


Hermes

在0.70版本中纫普,我們將Hermes作為了React Native的默認(rèn)引擎阅悍。在0.71版本中,我們對Hermes引擎做了進(jìn)一步的升級昨稼,包括如下:

  • JSON.parse性能提升30%
  • 增加對String, TypedArray, and Array屬性at()的支持
  • 在Metro中通過網(wǎng)絡(luò)實現(xiàn)加載source maps

新架構(gòu)

當(dāng)然节视,在這個版本中,我們也帶來了諸多關(guān)于新架構(gòu)體驗及性能方面的升級假栓。

  • 大幅度減少了Android平臺的編譯時間肴茄,并解決了諸多Window平臺的編譯問題
  • 現(xiàn)在可以啟用新體系結(jié)構(gòu),而無需在應(yīng)用程序中添加任何C++代碼但指,并且CLI應(yīng)用程序模板已清除所有C++代碼和CMake文件寡痰。
  • 在iOS平臺設(shè)置開啟新架構(gòu)支持更加簡介
  • 在iOS平臺,在podspec中新增了install_module_dependencies函數(shù)用于管理所有需要的依賴項棋凳。

其他重大修復(fù)

  • 更好的堆棧幀管理:我們已經(jīng)更新了React Native的內(nèi)部幀列表拦坠,因此調(diào)用LogBox將將會更加頻繁,可以幫助開發(fā)者更快地調(diào)試問題剩岳。
  • 構(gòu)建時間改進(jìn):我們將assets部分代碼遷移到Maven Central中贞滨,以改善Hermes在當(dāng)前和新架構(gòu)下的構(gòu)建時間(iOS和Android)。
  • Android模板改進(jìn):Android模板被清理,現(xiàn)在完全依賴于React Native Gradle插件晓铆,開發(fā)者可以直接在React Native Gradle Plugin中找到配置說明勺良。

其他重大更新

除了上面的介紹的更新外,此版本還帶來了如下一些重大更新骄噪。

  • 更改控制臺日志:現(xiàn)在直接使用LogBox.ignoreLog不再過濾控制臺日志尚困,這意味著會在控制臺中看到LogBox中靜默的日志。有關(guān)更多細(xì)節(jié)链蕊,請參閱LogBox.isIgnoredLog() 事甜。
  • 移除AsyncStorage和MaskedViewIOS:這些組件在0.59版本已被棄用,所以是時候完全刪除它們了滔韵。對于替代方案逻谦,請查看React Native社區(qū)的替換方案
  • JSCRuntime移到react-jsc: react-jsi現(xiàn)在分為react-jsc和react-jsi兩部分陪蜻。如果需要使用JSCRuntime邦马,只需要添加react-jsc作為依賴項即可。

參考文檔:https://reactnative.dev/blog/2023/01/12/version-071

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宴卖,一起剝皮案震驚了整個濱河市滋将,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嘱腥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拘悦,死亡現(xiàn)場離奇詭異齿兔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)础米,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門分苇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屁桑,你說我怎么就攤上這事医寿。” “怎么了蘑斧?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵靖秩,是天一觀的道長。 經(jīng)常有香客問我竖瘾,道長沟突,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任捕传,我火速辦了婚禮惠拭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庸论。我一直安慰自己职辅,他們只是感情好棒呛,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著域携,像睡著了一般簇秒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涵亏,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天宰睡,我揣著相機(jī)與錄音,去河邊找鬼气筋。 笑死拆内,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宠默。 我是一名探鬼主播麸恍,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搀矫!你這毒婦竟也來了抹沪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤瓤球,失蹤者是張志新(化名)和其女友劉穎融欧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卦羡,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡噪馏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绿饵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欠肾。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拟赊,靈堂內(nèi)的尸體忽然破棺而出刺桃,到底是詐尸還是另有隱情,我是刑警寧澤吸祟,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布瑟慈,位于F島的核電站,受9級特大地震影響屋匕,放射性物質(zhì)發(fā)生泄漏封豪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一炒瘟、第九天 我趴在偏房一處隱蔽的房頂上張望吹埠。 院中可真熱鬧,春花似錦、人聲如沸缘琅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刷袍。三九已至翩隧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呻纹,已是汗流浹背堆生。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留雷酪,地道東北人淑仆。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像哥力,于是被迫代替她去往敵國和親蔗怠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容