Dynamic components
Dynamic components mean components that generate styles based on their props. You can derive styles from props, apply conditionally a variant or any other logic.
styled.{{tag}}
allows to be defined by a function, where it should return a string. This function is going to be available as props API for that component, including all props from the element. Like following:
module Dynamic = %styled.div(
(~color, ~background) => `
color: $(color);
background-color: $(background);
`
)
<Dynamic color=CssJs.hex("#EB5757") background=CssJs.hex("#516CF0")>
{React.string("Hello!")}
</Dynamic>
module Dynamic = %styled.div(
(~color, ~background) => `
color: $(color);
background-color: $(background);
`
)
<Dynamic color=CssJs.hex("#EB5757") background=CssJs.hex("#516CF0")>
{React.string("Hello!")}
</Dynamic>
All rules from Interpolation are applied here. In the example, color
and background
are CssJs.Color.t
CssJs.Color.t
since it gets inferred from the CSS property. It's called type holes https://twitter.com/davesnx/status/1552305210558742528
Collision
If you create a dynamic component with a prop that collides with the name of a React prop, it will override it.
For example if your dynamic component is defined with a prop "size" it will override size
from makeProps. This mechanism is to ensure that you can name your props the way you want it.