Component life-cycle
Describes the component life-cycle
class MainPageState
{
public bool Toggle { get; set; }
public int CurrentValue { get; set; }
}
class MainPage : Component<MainPageState>
{
public override VisualNode Render()
=> ContentPage(
VStack(spacing: 5,
Button($"Use {(!State.Toggle ? "increment" : "decrement")} button", ()=> SetState(s => s.Toggle = !s.Toggle)),
State.Toggle ?
new IncrementalCounter()
.CurrentValue(State.CurrentValue)
.ValueChanged(v => SetState(s => s.CurrentValue = v))
:
new DecrementalCounter()
.CurrentValue(State.CurrentValue)
.ValueChanged(v => SetState(s => s.CurrentValue = v))
)
.Center()
);
}
partial class IncrementalCounter : Component
{
[Prop]
int _currentValue;
[Prop]
private Action<int> _valueChanged;
protected override void OnMounted()
{
Debug.WriteLine("[IncrementalCounter] OnMounted()");
base.OnMounted();
}
protected override void OnPropsChanged()
{
Debug.WriteLine($"[IncrementalCounter] OnPropsChanged(_currentValue={_currentValue})");
base.OnPropsChanged();
}
protected override void OnWillUnmount()
{
Debug.WriteLine("[IncrementalCounter] OnWillUnmount()");
base.OnWillUnmount();
}
public override VisualNode Render()
{
Debug.WriteLine("[IncrementalCounter] Render()");
return Button($"Increment from {_currentValue}!")
.OnClicked(() => _valueChanged?.Invoke(++_currentValue));
}
}
class DecrementalCounter : Component
{
[Prop]
int _currentValue;
[Prop]
private Action<int> _valueChanged;
protected override void OnMounted()
{
Debug.WriteLine("[DecrementalCounter] OnMounted()");
base.OnMounted();
}
protected override void OnPropsChanged()
{
Debug.WriteLine($"[DecrementalCounter] OnPropsChanged(_currentValue={_currentValue})");
base.OnPropsChanged();
}
protected override void OnWillUnmount()
{
Debug.WriteLine("[DecrementalCounter] OnWillUnmount()");
base.OnWillUnmount();
}
public override VisualNode Render()
{
Debug.WriteLine("[DecrementalCounter] Render()");
return new Button($"Decrement from {_currentValue}!")
.OnClicked(() => _valueChanged?.Invoke(--_currentValue));
}
}
Last updated