StyleSheet
Official documentation StyleSheet
mainly has a method to create an object containing many styles, similar to a CSS StyleSheet. This is helpful to keep style definitions at fewer locations, away from the render function. Separating concerns in your code in this manner should help readability. Named styles might also help differentiate between your components. Finally, allowing components to refer to styles by ID, it also reduces the amount of data transferred over the JS bridge.
Takes and returns Js.t('a)
objects, with string
keys and Style.t
values. Individual styles can be accessed using ##
, followed by the name specified as the key.
Note that using Style.array
or Style.list
to pass array(Style.t)
or list(Style.t)
is illegal within a StyleSheet
, even those are valid style
props for components. You may, howevever, use the flatten
method to convert array(Style.t)
into a valid Style.t
object.
create: Js.t('a) => Js.t('a)
Takes an array of styles (of type Style.t
) and returns a single style (also of type Style.t
). Creates a Style.t
object which is valid in a StyleSheet
.
flatten: array(Style.t) => Style.t
To ensure the resulting line will look sharp, this specifies an integer number of pixels which should approximate the standard thickness of a thin line on the platform given the screen density.
hairlineWidth: float
This is the style
{
position: 'absolute',
left: 0,
right: 0,
top: 0,
bottom: 0
}
which is frequently used to create overlays. A common use is to add these props to a style using the spread operator (...
), but as ReasonML does not allow the operator when fields are not explicitly set, you may use the flatten
method instead.
absoluteFill: Style.t
This is identical to absoluteFill
when used with pure functions.
absoluteFillObject: Style.t
Please also see the example in documentation of the Style
API.
open ReactNative;
let borderStyle = Style.(style(~borderWidth=StyleSheet.hairlineWidth, ()));
let styles =
Style.(
StyleSheet.create({
// style may be defined inline
"container": style(~flex=1., ~flexDirection=`column, ()),
"screen": style(~width=windowWidth->dp, ()),
// or already defined elsewhere
"borderStyle": borderStyle,
"overlay": StyleSheet.absoluteFill,
})
);
let flatStyle = StyleSheet.flatten([|styles##container, styles##screen|]);