【React Native】文件翻譯閱讀紀錄 - APIs - StyleSheet

by - 上午9:00

Facebook Open Source React Native


StyleSheet

StyleSheet是一種類似於CSS StyleSheets的抽象

創建一個新的StyleSheet:
const styles = StyleSheet.create({
  container: {
    borderRadius: 4,
    borderWidth: 0.5,
    borderColor: '#d6d7da',
  },
  title: {
    fontSize: 19,
    fontWeight: 'bold',
  },
  activeTitle: {
    color: 'red',
  },
});
使用StyleSheet:
<View style={styles.container}>
  <Text style={[styles.title, this.props.isActive && styles.activeTitle]} />
</View>
代碼質量:
  • 通過將樣式移離渲染功能,您可以更輕鬆地理解代碼。
  • 命名樣式是為渲染函數中的低級組件添加含義的好方法。
性能:
  • 從樣式對象製作樣式表可以通過ID引用它,而不是每次都創建一個新的樣式對象。
  • 它還允許僅通過橋發送一次樣式。所有後續用法都將引用id(尚未實現)。

Methods

Properties


參考

Methods

setStyleAttributePreprocessor()

static setStyleAttributePreprocessor(property, process)
警告:實驗。突然發生的變化可能會發生很多,並且不會得到可靠的宣布。整件事可能會被刪除,誰知道呢?使用風險由您自己承擔。

設置用於預處理樣式屬性值的函數。這在內部用於處理顏色和變換值。你不應該使用它,除非你真的知道你在做什麼,並已經用盡了其他選擇。

create()

static create(obj)
從給定對象創建StyleSheet樣式引用。

flatten

static flatten(style)
將樣式對像數組展平為一個聚合樣式對象。或者,此方法可用於查找StyleSheet.register返回的ID。
注意:請謹慎行事,因為濫用此功能會使您在優化方面受到重視。 ID通常通過橋接和內存實現優化。直接引用樣式對象將使您無法進行這些優化。
例:
var styles = StyleSheet.create({
  listItem: {
    flex: 1,
    fontSize: 16,
    color: 'white',
  },
  selectedListItem: {
    color: 'green',
  },
});

StyleSheet.flatten([styles.listItem, styles.selectedListItem]);
// returns { flex: 1, fontSize: 16, color: 'green' }
替代用途:
var styles = StyleSheet.create({
  listItem: {
    flex: 1,
    fontSize: 16,
    color: 'white',
  },
  selectedListItem: {
    color: 'green',
  },
});

StyleSheet.flatten(styles.listItem);
// return { flex: 1, fontSize: 16, color: 'white' }
// Simply styles.listItem would return its ID (number)
此方法在內部使用StyleSheetRegistry.getStyleByID(樣式)來解析由ID表示的樣式對象。因此,樣式對像數組(StyleSheet.create()的實例)被單獨解析為它們各自的對象,合併為一個然後返回。這也解釋了替代用途。

Properties

hairlineWidth

var styles = StyleSheet.create({
  separator: {
    borderBottomColor: '#bbb',
    borderBottomWidth: StyleSheet.hairlineWidth,
  },
});
此常量將始終為圓形像素數(因此由其定義的線條看起來很清晰)並將嘗試匹配底層平台上細線的標準寬度。但是,您不應該依賴它是一個恆定的大小,因為在不同的平台和屏幕密度上,它的值可能會以不同的方式計算。

如果您的模擬器縮小尺寸,則可能無法看到帶有細線寬度的線條。

absoluteFill

一種非常常見的模式是創建具有位置絕對和零位置的疊加,因此絕對填充可以用於方便並減少這些重複樣式的重複。

absoluteFillObject

有時您可能需要absoluteFill但有一些調整 - absoluteFillObject可用於在StyleSheet中創建自定義條目,例如:
const styles = StyleSheet.create({
  wrapper: {
    ...StyleSheet.absoluteFillObject,
    top: 10,
    backgroundColor: 'transparent',
  },
});


You May Also Like

0 意見