We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
StyleSheet 参考了CSS StyleSheets的类似的抽象写法
StyleSheet
CSS StyleSheets
const 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]} /> </View>
render()
StyleSheet.create()
这个属性定义了各平台的细线的宽度。它可以被用在两个元素之间的边界(border)或分割的粗细值。 比如:
{ borderBottomColor: '#bbb', borderBottomWidth: StyleSheet.hairlineWidth }
该常数始终是像素的整数倍(因此,由其定义的线看起来会很清晰(look crisp?))并将尝试匹配基础平台上细线的标准宽度。但是您不应该依赖它作为一个恒定值使用,因为在不同平台和屏幕像素下,其值可能会以不同的方式计算。[1] 详见PixelRatio
如果缩小模拟器,用StyleSheet.hairlineWidth宽度定义的细线可能不可见
StyleSheet.hairlineWidth
一个非常常见的创建具有绝对位置和零位置的叠加层样式,因此可以使用 absoluteFill来方便并减少那些不必要的重复样式。
absoluteFill
//TODO: This should be updated after we fix downstream Flow sites.
有时候您可能需要对absoluteFill的样式做一些调整,我们推荐您使用absoluteFillObject在StyleSheet中创建自定义条目。
absoluteFillObject
const styles = StyleSheet.create({ wrapper: { ...StyleSheet.absoluteFillObject, top: 10, backgroundColor: 'transparent', } });
By the way,absoluteFill对象已经被冻结,所以无法修改absoluteFill。
const absoluteFill = { position: 'absolute', left: 0, right: 0, top: 0, bottom: 0, }; if (__DEV__) { Object.freeze(absoluteFill); }
已废弃
StyleSheet.compose(a, b) is deprecated; use array syntax, i.e., [a,b].
组合两种样式,以便style2会覆盖style1中的同类型样式属性。
style2
style1
compose
function compose(style1, style2){ if(style1 != null && style2 != null){ return ([style1, style2]) } else { return style1 != null ? style1 : style2; } }
<View style={[style1, this.state.active&&style2]} />
DOM diff
StyleSheet.compose
<View style={StyleSheet.compose(style1, this.state.active&&style2)} />
扁平化一个样式对象数组,返回一个聚合的样式对象。 或者,可以使用此方法查找由StyleSheet.register返回的IDs。
StyleSheet.register
⚠️注意:请谨慎使用,因为这样可能会给您带来优化方面的负担。
通常,通过ID可以通过桥(bridge)和内存进行优化。直接引用样式对象将使您失去这些优化。
比如:
const 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' }
可以这样使用(二选一):
StyleSheet.flatten(styles.listItem); // return { flex: 1, fontSize: 16, color: 'white' } // 仅仅styles.listItem 将返回它的 ID (number)
该方法在内部使用StyleSheetRegistry.getStyleByID(style)来解析由ID表示的样式对象。 因此,将样式对象的数组(StyleSheet.create的实例)分别解析为它们各自的对象,合并为一个对象然后返回。 这也解释了替代用法。
StyleSheetRegistry.getStyleByID(style)
StyleSheet.create
创建一个StyleSheet对象并引用给定的对象。
By the way,返回的对象也会被冻结不可被修改,所以建议在组件外部并使用const声明:
const
Class Demo extends Component { ... } const styles = StyleSheet.create({ ... })
The text was updated successfully, but these errors were encountered:
No branches or pull requests
目录
compose简介
StyleSheet
参考了CSS StyleSheets
的类似的抽象写法StyleSheet
:StyleSheet
:StyleSheet
可以提高代码质量:render()
函数中分离,可以让代码更加容易理解StyleSheet
可以提高性能:StyleSheet.create()
创建的样式可以通过ID重复引用,而内联样式则每次都需要创建一个新的对象hairlineWidth
这个属性定义了各平台的细线的宽度。它可以被用在两个元素之间的边界(border)或分割的粗细值。
比如:
该常数始终是像素的整数倍(因此,由其定义的线看起来会很清晰(look crisp?))并将尝试匹配基础平台上细线的标准宽度。但是您不应该依赖它作为一个恒定值使用,因为在不同平台和屏幕像素下,其值可能会以不同的方式计算。[1] 详见PixelRatio
如果缩小模拟器,用
StyleSheet.hairlineWidth
宽度定义的细线可能不可见absoluteFill
一个非常常见的创建具有绝对位置和零位置的叠加层样式,因此可以使用
absoluteFill
来方便并减少那些不必要的重复样式。//TODO: This should be updated after we fix downstream Flow sites.
absoluteFillObject
有时候您可能需要对
absoluteFill
的样式做一些调整,我们推荐您使用absoluteFillObject
在StyleSheet
中创建自定义条目。By the way,
absoluteFill
对象已经被冻结,所以无法修改absoluteFill
。compose
已废弃
> compose(style1, style2)
- 使用场景:
上述代码在
组合两种样式,以便
style2
会覆盖style1
中的同类型样式属性。compose
源码实现:当有一种样式需要受到状态(state)控制有无时,
DOM diff
对比时样式属性则无法保持引用相等,所以需要使用StyleSheet.compose
辅助函数方便实现:flatten
扁平化一个样式对象数组,返回一个聚合的样式对象。
或者,可以使用此方法查找由
StyleSheet.register
返回的IDs。通常,通过ID可以通过桥(bridge)和内存进行优化。直接引用样式对象将使您失去这些优化。
比如:
可以这样使用(二选一):
该方法在内部使用
StyleSheetRegistry.getStyleByID(style)
来解析由ID表示的样式对象。 因此,将样式对象的数组(StyleSheet.create
的实例)分别解析为它们各自的对象,合并为一个对象然后返回。 这也解释了替代用法。create
创建一个
StyleSheet
对象并引用给定的对象。By the way,返回的对象也会被冻结不可被修改,所以建议在组件外部并使用
const
声明:Reference
The text was updated successfully, but these errors were encountered: