State that shares the lifecycle of the attached component.
States with constructor values
state MyState(initialValue: number) -> {
value = initialValue;
mut increment -> $value++;
}
view SomeView ~ MyState(8) -> {
<div>
<span>total: {$value}</span>
<button onClick={$increment}>add</button>
</div>
}
States without constructor values or with default values
state DefaultedState(initialValue: number = 0) -> { }
state SimpleState() -> { }
view SomeView ~ DefaultedState, SimpleState {
<div>
<span>total: {$value}</span>
<button onClick={$increment}>add</button>
</div>
}
Contextual state allows for components to communicate implicitly through statically declared dependencies.
state DragManager(initialX: number, initialY: number) -> {
x = initialX;
y = initialY;
mut move(x: number, y: number) -> {
$x = x;
$y = y;
}
}
view DragSubscriber ~ DragManager -> {
<div>
<span>x: {$x}</span>
<span>y: {$y}</span>
</div>
}
view DragContainer -> {
<div>
<DragManager initialX={30} initialY={50}>
<DragSubscriber />
</DragManager>
</div>
}
Object types can also be used to describe dependencies
This allows a component to be used in more generic scenarios.
type MovementManager {
x: number;
y: number;
}
view MovementSubscriber ~ MovementManager -> {
<div>
<span>x: {$x}</span>
<span>y: {$y}</span>
</div>
}
view DragContainer -> {
<div>
<DragManager initialX={30} initialY={50}>
<MovementSubscriber />
</DragManager>
<SlideManager initialX={40} initialY={30}>
<MovementSubscriber />
</SlideManager>
</div>
}