From 444c30b4c8eb7746ef8652aaaa0ab2862607d0a7 Mon Sep 17 00:00:00 2001 From: Adam <67035612+damzobridge@users.noreply.github.com> Date: Thu, 19 Jun 2025 14:19:59 -0700 Subject: [PATCH 1/2] feat: add onLoad callback to useRive --- src/hooks/useRive.tsx | 5 +++++ src/types.ts | 1 + 2 files changed, 6 insertions(+) diff --git a/src/hooks/useRive.tsx b/src/hooks/useRive.tsx index 93bc471..7e27749 100644 --- a/src/hooks/useRive.tsx +++ b/src/hooks/useRive.tsx @@ -142,6 +142,11 @@ export default function useRive( riveRef.current = r; r.on(EventType.Load, () => { isLoaded = true; + + if (options.onLoad) { + options.onLoad(r!); + } + // Check if the component/canvas is mounted before setting state to avoid setState // on an unmounted component in some rare cases if (canvasElem) { diff --git a/src/types.ts b/src/types.ts index 0eebf66..5894f97 100644 --- a/src/types.ts +++ b/src/types.ts @@ -15,6 +15,7 @@ export type UseRiveOptions = { useOffscreenRenderer: boolean; shouldResizeCanvasToContainer: boolean; shouldUseIntersectionObserver?: boolean; + onLoad?: (rive: Rive) => void; }; export type Dimensions = { From 2850ebe9d0879c4b075ac99b14beb0b7e8ee0146 Mon Sep 17 00:00:00 2001 From: Adam <67035612+damzobridge@users.noreply.github.com> Date: Mon, 23 Jun 2025 09:27:36 -0700 Subject: [PATCH 2/2] refactor: change onLoad to onRiveReady --- src/hooks/useRive.tsx | 7 ++++--- src/types.ts | 5 +++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/hooks/useRive.tsx b/src/hooks/useRive.tsx index 7e27749..0446fd4 100644 --- a/src/hooks/useRive.tsx +++ b/src/hooks/useRive.tsx @@ -131,9 +131,10 @@ export default function useRive( let r: Rive | null; if (rive == null) { const { useOffscreenRenderer } = options; + const { onRiveReady, ...restRiveParams } = riveParams; r = new Rive({ useOffscreenRenderer, - ...riveParams, + ...restRiveParams, canvas: canvasElem, }); if (riveRef.current != null) { @@ -143,8 +144,8 @@ export default function useRive( r.on(EventType.Load, () => { isLoaded = true; - if (options.onLoad) { - options.onLoad(r!); + if (onRiveReady) { + onRiveReady(r!); } // Check if the component/canvas is mounted before setting state to avoid setState diff --git a/src/types.ts b/src/types.ts index 5894f97..68aed06 100644 --- a/src/types.ts +++ b/src/types.ts @@ -6,7 +6,9 @@ import { } from '@rive-app/canvas'; import { ComponentProps, RefCallback } from 'react'; -export type UseRiveParameters = Partial> | null; +export type UseRiveParameters = Partial> & { + onRiveReady?: (rive: Rive) => void; +} | null; export type UseRiveOptions = { useDevicePixelRatio: boolean; @@ -15,7 +17,6 @@ export type UseRiveOptions = { useOffscreenRenderer: boolean; shouldResizeCanvasToContainer: boolean; shouldUseIntersectionObserver?: boolean; - onLoad?: (rive: Rive) => void; }; export type Dimensions = {