class StyleSheet {
static create(obj) {
var result = {};
for (var key in obj) {
StyleSheetValidation.validateStyle(key, obj[key]);
result[key] = StyleSheetRegistry.registerStyle(obj[key]);
}
return result;
}
}
遍歷輸入對象,驗證後註冊到註冊表,返回 {key: uniqueID} 映射。
var styles = {}, uniqueID = 1, emptyStyle = {};
class StyleSheetRegistry {
static registerStyle(style) {
var id = ++uniqueID;
if (__DEV__) Object.freeze(style);
styles[id] = style;
return id;
}
static getStyleByID(id) {
if (!id) return emptyStyle; // 支援 style={[cond && id]} 模式
var style = styles[id];
if (!style) { console.warn('Invalid style id: ' + id); return emptyStyle; }
return style;
}
}
註冊凍結樣式對象,賦予遞增 ID。getStyleByID 供運行時解析。
var styles = StyleSheet.create({
container: { borderRadius: 4, borderWidth: 0.5, borderColor: '#d6d7da' },
title: { fontSize: 19, fontWeight: 'bold' },
activeTitle: { color: 'red' }
});
// 單一樣式
<View style={styles.container} />
// 多樣式合併(後者覆蓋前者)
<Text style={[styles.title, this.props.isActive && styles.activeTitle]} />
&& 短路特性:false && id → false,getStyleByID(false) 返回空樣式。