Events#
Handle user interactions with React-style event props.
Click Events#
Copy < Button
text = "Click me"
onClick = {( e ) => {
console. log ( "Clicked at" , e.x, e.y)
}}
/>
Pointer Events#
Track pointer (mouse/touch) interactions:
Copy < View
style = {{ width: 200 , height: 200 , backgroundColor: "#333" }}
onPointerDown = {( e ) => console. log ( "Down" , e.x, e.y)}
onPointerUp = {( e ) => console. log ( "Up" )}
onPointerMove = {( e ) => console. log ( "Move" , e.x, e.y)}
onPointerEnter = {( e ) => console. log ( "Enter" )}
onPointerLeave = {( e ) => console. log ( "Leave" )}
>
< Label text = "Hover and click me" />
</ View >
Focus Events#
Copy < TextField
placeholder = "Type here..."
onFocus = {( e ) => console. log ( "Focused" )}
onBlur = {( e ) => console. log ( "Lost focus" )}
/>
Change Events#
Copy < TextField value = {text} onChange = {( e ) => setText (e.value)} />
< Toggle value = {on} onChange = {( e ) => setOn (e.value)} label = "Enable" />
< Slider value = {vol} lowValue = { 0 } highValue = { 100 } onChange = {( e ) => setVol (e.value)} />
Keyboard Events#
Copy < TextField
onKeyDown = {( e ) => {
if (e.keyCode === CS .UnityEngine.KeyCode.Return) {
console. log ( "Enter pressed!" )
}
}}
/>
Event Propagation#
Events bubble up through the component tree. Use stopPropagation() to prevent this:
Copy < View onClick = {() => console. log ( "Parent" )}>
< Button
text = "Click"
onClick = {( e ) => {
e. stopPropagation ()
console. log ( "Only this handler runs" )
}}
/>
</ View >
Pointer Capture#
Lock pointer events to a specific element — essential for reliable dragging. Without capture, fast pointer movement can leave the element's bounds and drop events.
Copy useExtensions ( CS .UnityEngine.UIElements.PointerCaptureHelper)
function Draggable ({ children }) {
const ref = useRef ( null )
const [ pos , setPos ] = useState ({ x: 0 , y: 0 })
const startPos = useRef ({ x: 0 , y: 0 })
return (
< View
ref = {ref}
style = {{ position: "absolute" , left: pos.x, top: pos.y }}
onPointerDown = {( e ) => {
ref.current. CapturePointer (e.pointerId)
startPos.current = { x: e.x - pos.x, y: e.y - pos.y }
}}
onPointerMove = {( e ) => {
if (ref.current. HasPointerCapture (e.pointerId)) {
setPos ({
x: e.x - startPos.current.x,
y: e.y - startPos.current.y,
})
}
}}
onPointerUp = {( e ) => ref.current. ReleasePointer (e.pointerId)}
>
{children}
</ View >
)
}
useExtensions registers C# extension methods so they can be called on elements. See C# Interop — Extension Methods for details.
Other Events#
Copy // Geometry — detect size/position changes
< View onGeometryChanged = {( e ) => console. log (e.newRect)} />
// Transitions — monitor USS animations
< View
onTransitionEnd = {( e ) => console. log ( "Done:" , e.styleProperty)}
/>
// Navigation — gamepad/keyboard UI navigation
< View
onNavigationMove = {( e ) => console. log ( "Direction:" , e.direction)}
onNavigationSubmit = {( e ) => console. log ( "Submit" )}
/>
// Mouse-specific (prefer pointer events for cross-device support)
< View
onMouseDown = {( e ) => console. log ( "Mouse" , e.button)}
onWheel = {( e ) => console. log ( "Scroll" , e.delta.y)}
/>
Event Object Properties#
Pointer / Mouse Event#
Property Type Description typestringEvent type name xnumberX position ynumberY position buttonnumberMouse button (0=left, 1=middle, 2=right) pointerIdnumberUnique pointer identifier
Change Event#
Property Type Description typestringEvent type name valueTNew value (type depends on control)
Event Mapping Reference#
Click & Pointer#
React Prop UI Toolkit Event onClickClickEventonPointerDownPointerDownEventonPointerUpPointerUpEventonPointerMovePointerMoveEventonPointerEnterPointerEnterEventonPointerLeavePointerLeaveEventonPointerCancelPointerCancelEventonPointerCapturePointerCaptureEventonPointerCaptureOutPointerCaptureOutEventonPointerStationaryPointerStationaryEvent
Mouse#
React Prop UI Toolkit Event onMouseDownMouseDownEventonMouseUpMouseUpEventonMouseMoveMouseMoveEventonMouseEnterMouseEnterEventonMouseLeaveMouseLeaveEventonMouseOverMouseOverEventonMouseOutMouseOutEventonWheelWheelEventonContextClickContextClickEvent
React Prop UI Toolkit Event onFocusFocusEventonBlurBlurEventonFocusInFocusInEventonFocusOutFocusOutEventonChangeChangeEvent<T>onInputInputEventonKeyDownKeyDownEventonKeyUpKeyUpEvent
Drag & Drop#
React Prop UI Toolkit Event onDragEnterDragEnterEventonDragLeaveDragLeaveEventonDragUpdatedDragUpdatedEventonDragPerformDragPerformEventonDragExitedDragExitedEvent
Layout & Transitions#
React Prop UI Toolkit Event onGeometryChangedGeometryChangedEventonTransitionRunTransitionRunEventonTransitionStartTransitionStartEventonTransitionEndTransitionEndEventonTransitionCancelTransitionCancelEvent
Navigation#
React Prop UI Toolkit Event onNavigationMoveNavigationMoveEventonNavigationSubmitNavigationSubmitEventonNavigationCancelNavigationCancelEventonTooltipTooltipEvent
Custom Rendering#
For custom drawing with onGenerateVisualContent, see the Vector Drawing guide.