React Native 0.63 發布,告警系統、顏色與交互能力改進

2020-12-12 開源中國

React Native 0.63 已經發布了,此版本主要亮點包括:

  • 默認啟用 LogBox
  • <Pressable /> 組件
  • 新增使用系統定義顏色的 API

默認啟用 LogBox

社區一直以來反饋錯誤和警告很難在 React Native 中進行調試,因此開發團隊研究了 React Native 中的整個錯誤、警告和日誌系統,從頭開始對其進行了重新設計,現在使用一個新系統 LogBox 替換 redbox、yellowbox 與日誌記錄。上一個版本中已經引入該 LogBox,此版本開始,它默認開啟,並在使用 yellowbox 等一些不建議使用的模塊或方法時發出警告,0.64 版本中將刪除相關 API。

LogBox 目標是:

  • 簡潔:日誌應提供調試問題所需的最少信息量。
  • 格式化:日誌應該格式化,可以快速找到所需的信息。
  • 可操作性:日誌應可操作,可以解決問題並繼續進行。

為了實現這些目標,LogBox 設計時包括:

  • 日誌通知:重新設計了警告通知並增加了對錯誤的支持,以便所有 console.warn 和 console.log 消息都顯示為通知,而不是覆蓋應用程式。
  • 代碼幀:每個錯誤和警告都包括一個代碼幀,可在應用程式內部顯示日誌的原始碼,可以快速識別問題的來源。
  • 組件棧:提供了一個一致的、不會使日誌消息混亂的組件棧幀信息,只顯示前三個。
  • 摺疊組件棧幀:默認情況下摺疊與應用程式代碼無關的調用堆棧幀,可以在應用程式中快速查看問題,而不必通過 React Native 內部篩選。
  • 語法錯誤格式:改進了語法錯誤的格式,並通過語法高亮添加了代碼幀,可以查看錯誤的根源進行修復,並繼續進行編碼。

pressable 組件

React Native 現在支持 Web、桌面和電視等平臺,但是缺少對其它輸入方式的支持。為了解決在所有平臺上支持高質量的交互體驗,此版本提供了一個新核心組件Pressable。該組件可用於檢測各種類型的交互,旨在提供對交互當前狀態的直接訪問,而不必在父組件中手動維護狀態。同時它還旨在使平臺能夠擴展其功能,例如懸停、模糊與聚焦等。

import { Pressable, Text } from 'react-native';<Pressable onPress={() => { console.log('pressed'); }} style={({ pressed }) => ({ backgroundColor: pressed ? 'lightskyblue' : 'white' })}> <Text style={styles.text}>Press Me!</Text></Pressable>;

新增使用系統定義顏色的 API

每個平臺都有系統定義的顏色,儘管可以通過AppearanceAPI 或 AccessibilityInfo檢測並設置其中的某些樣式,但是這樣的操作不僅開發成本高昂,而且還局限。

React Native 現在提供了一個開箱即用的解決方案來使用這些系統顏色。PlatformColor()是一個新的 API,可以像 React Native 中的其它任何顏色一樣使用。

例如,在 iOS 上,系統提供一種顏色labelColor,可以在 React Native 中這樣使用 PlatformColor

import { Text, PlatformColor } from 'react-native';<Text style={{ color: PlatformColor('labelColor') }}> This is a label</Text>;

另一方面,Android 提供像 colorButtonNormal 這樣的顏色,可以在 React Native 中這樣使用 PlatformColor

import { View, Text, PlatformColor } from 'react-native';<View style={{ backgroundColor: PlatformColor('?attr/colorButtonNormal') }}> <Text>This is colored like a button!</Text></View>;

同時DynamicColorIOS是僅限於 iOS 的 API,可以定義在淺色和深色模式下使用的顏色。與PlatformColor相似,可以在任何可以使用顏色的地方使用:

import { Text, DynamicColorIOS } from 'react-native';const customDynamicTextColor = DynamicColorIOS({ dark: 'lightskyblue', light: 'midnightblue'});<Text style={{ color: customDynamicTextColor }}> This color changes automatically based on the system theme!</Text>;

此外 0.63 版本還不再支持 iOS 9 與 Node.js 8,完整更新內容可以查看:

相關焦點

  • Facebook 發布 React Native for Android
    Facebook 今天發布了 React Native for Android,把 Web 和原生平臺的 JavaScript
  • React Native 0.62 發布 默認支持Flipper 新的暗黑模式
    React Native 0.62 發布了,此版本一大亮點是默認支持 Flipper。const colorScheme = Appearance.getColorScheme();if (colorScheme === 'dark') { // Use dark color scheme}同時還添加了一個 hook 跟蹤用戶首選項的狀態更新:import {Text, useColorScheme} from 'react-native
  • 怎麼理解React Native的新架構?
    社區化後,大量的系統組件會開放到社區中,交個開發者維護,例如現在的 webview 組件。上面這些概念其實在架構圖上已經體現了,主要用於替換原有的 bridge 設計,下面我們將重點剖析這些模塊的原理和作用。
  • 推薦幾個 React Native UI 庫
    react-native-elementshttps://github.com/react-native-training/react-native-elementslottie-react-native相信不少開發者都聽說過 lottie,一個非常輕量級同時又支持多平臺的動畫庫,這個庫就是對應的 RN 版本了。
  • React Native 0.60.2 發布,帶來全新 JS 引擎 Hermes
    React Native 0.60.2 發布了,此版本帶來了 Chain React Conf 2019 上宣布的 Hermes
  • React Native實戰:配置和起步
    srain$ node -vv4.0.0mac-2:react-native srain$ npm -v2.14.2安裝 watchman 和 flow這兩個包分別是監控文件變化和類型檢查的。>文檔提到:react-native init AwesomeProject初始化一個項目,其中 AwesomeProject 是項目名字,這個隨意。
  • React Native 已死?
    )Part 2:React Native at Airbnb: The Technology(https://medium.com/airbnb-engineering/react-native-at-airbnb-the-technology-dafd0b43838)Part
  • 入門 | 從Android到React Native開發
    Webstrom 簡單配置http://blog.csdn.net/gz_jero/article/details/51503374React Native 開發環境配置http://reactnative.cn/docs/0.31/getting-started.html(2)項目理解React Native創建工程,是通過在命令終端輸入
  • ReactNative的調試工具Expo
    很久沒有再寫關於React的文字了,再看看React又有不少變化,從官網的文字中就可以看出無論是Reactjs還是ReactNative都變的越來越簡潔了,可以感覺到Facebook在React的生態圈中依然在不斷完善和改進
  • 從零到一:用ReactNative開發的第一個跨平臺app
    3技術框架"buffer": "^5.0.6",(base64編碼)"react": "16.0.0-alpha.6","react-native": "0.44.2","react-native-camera": "^0.6.0",(掃碼)"react-native-deprecated-custom-components
  • React Status 中文周刊 #52 - Recoil 0.4.0 版本正式發布
    長按識別二維碼查看原文   https://react-hot-toast.com/docs/version-2Timo LinsGatsby Serverless Functions 與國際空間站 —
  • ReactNative學習資源大匯集
    react-native 官方api文檔 http://facebook.github.io/react-native/docs/getting-started.htmlreact-native中文文檔(極客學院) http://wiki.jikexueyuan.com/project/react-native/react-native中文文檔(react
  • 最火移動端跨平臺方案盤點:React Native、weex、Flutter
    如下圖所示,react native 的跨平臺是實現主要由三層構成,其中 C++ 實現的動態連結庫(.so),作為中間適配層橋接,實現了js端與原生端的雙向通信交互。而跨線程通信,也意味著 Js Thread 和原生之間交互與通訊是異步的。可以看出,react native 跨平臺的關鍵在於C++層,開發人員大部分時候,只專注於JS 端的代碼實現。
  • 超強通用的React Native Tab控制器使用詳解-進階篇
    投稿人:hiphonezhu 地址:http://www.jianshu.com/p/b0cfe7f11ee7本文所講知識點在上一篇文章當中,我們學習了react-native-scrollable-tab-view的基本使用方式,包括基本Props的使用介紹等。
  • [React Native]使用 react-navigation 搭建App頂部導航欄
    之前用過一段時間的 react-native-scrollable-tab-view,前段時間貌似是因為升級了
  • 十大最受歡迎的 React Native 應用開發編輯器
    Atom 常用的包atom-react-native-autocomplete package - 該包針對 React-Native,為 Atom 編輯器提供自動補全功能。atom-react-native-css - 這是一個內置支持 SASS、SCSS 的 React-Native 組件的包。
  • ReactNative從零到完整項目-嵌入到安卓原生應用
    在`build.gradle`文件中添加`com.facebook.react:react-native:+`,以及一個指向`node_nodules/`目錄中的`react-native`預編譯庫的`maven`路徑。5.  創建一個React Native專屬的`Activity`,在其中再創建`ReactRootView`。6.
  • ReactNative 的組件架構設計
    【編者按】本篇作者 @cnsnake11,寫的是 react native 的架構設計,如果你用 react
  • 推薦11 款 React Native 開源移動 UI 組件
    left: 0,    bottom: 0,    right: 0,  },});4.導航控制項 react-native-navbarreact-native-navbar 是用於 React Native 上簡單的定製化導航欄。
  • 基礎篇章:關於 React Native 之 Switch 和 ProgressBarAndroid 組件的講解
    thumbTintColor color ios 開關上圓形按鈕的背景顏色tintColor color 關閉狀態時邊框顏色代碼實例效果圖先看一個簡單的效果圖,就是這麼簡單,代碼其實更簡單。  Text,  Switch,  View} from 'react-native';export default class SwitchDemo extends Component {  state = {    colorTrueSwitchIsOn: true,    colorFalseSwitchIsOn: false