# Component Properties

When creating a component you almost always need to pass props (or parameters/property values) in order to customize its appear or behavior. In ReactorUI you can use plain properties.

Take for example this component that implement an activity indicator with a label:

```csharp
public class BusyComponent : RxComponent
{
    private string _message;
    private bool _isBusy;

    public BusyComponent Message(string message)
    {
        _message = message;
        return this;
    }

    public BusyComponent IsBusy(bool isBusy)
    {
        _isBusy = isBusy;
        return this;
    }

    public override VisualNode Render()
    {
        return new RxStackLayout()
        {
            new RxActivityIndicator()
                .IsRunning(_isBusy),
            new RxLabel()
                .Text(_message)
        };
    }
}
```

and this is how we can use it in a page:

```csharp
public class BusyPageState : IState
{
    public bool IsBusy { get; set; }
}

public class BusyPageComponent : RxComponent<BusyPageState>
{
    protected override void OnMounted()
    {
        SetState(_ => _.IsBusy = true);

        //OnMounted is called on UI Thread, move the slow code to a background thread
        Task.Run(async () =>
        {
            //Simulate lenghty work
            await Task.Delay(3000);

            SetState(_ => _.IsBusy = false);
        });

        base.OnMounted();
    }

    public override VisualNode Render()
    {
        return new RxContentPage()
        {
            State.IsBusy ?
            new BusyComponent()
                .Message("Loading")
                .IsBusy(true)
            :
            RenderPage()
        };
    }

    private VisualNode RenderPage()
        => new RxLabel("Done!")
                .VCenter()
                .HCenter();
}

```

![](https://3850152230-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M3fGRH7kWyk6bJDMyZV%2F-M43LjxV9xlBjG9RSuAl%2F-M43NK217f8U1zbemscJ%2FReactorUI_BusyComponentDemo.gif?alt=media\&token=62793cb5-d15c-4e49-b55e-4b0c4bff11a2)

**NOTE**: If you need to set properties of components hosted in a different page you should use a Props object (see  [Navigation](https://adospace.gitbook.io/reactorui/guide/navigation#passing-data-between-pages))
