Extending ReactUnity

Declaring custom components

You can declare custom components in ReactUnity. This is useful when you want to create a component that needs to interact with the underlying backend (ugui or uitoolkit).

To declare a custom component, you need to create a new class extending UGUIComponent or UIToolkitComponent and register it in UGUIContext.ComponentCreators or UIToolkitContext.ComponentCreators respectively.

Example

First we create the custom component. For instance, we are declaring a custom button component that has a red background color.

using ReactUnity.Styling;
using ReactUnity.UGUI;
using UnityEngine;

public class CustomButtonComponent : ButtonComponent
{
public CustomButtonComponent(UGUIContext context, Color backgroundColor) : base(context)
{
Style[StyleProperties.backgroundColor] = backgroundColor;
}
}

Then we need to register this component in UGUIContext.ComponentCreators dictionary. This can be done in a MonoBehaviour that is attached to the same GameObject as ReactRendererUGUI component. The declaration must be done before ReactRendererUGUI is enabled.

using ReactUnity.UGUI;
using UnityEngine;

public class CustomComponentInitializer : MonoBehaviour
{
public ReactRendererUGUI reactUnity;
public Color customButtonColor;

void Start()
{
UGUIContext.ComponentCreators["customButton"] = (type, text, context) => new CustomButtonComponent(context, customButtonColor);

reactUnity.enabled = true;
}
}

Typescript declaration

You may also need to declare your custom component in Typescript

declare global {
interface ReactUnityCustomElements {
mycomponent: { myprop?: number };
}
}

For example:

declare global {
interface ReactUnityCustomElements {
button: Button;
}
}