diff --git a/example/package.json b/example/package.json index 5139471f..feb073a4 100644 --- a/example/package.json +++ b/example/package.json @@ -18,6 +18,7 @@ "@react-native-picker/picker": "^2.11.4", "@react-navigation/native": "^7.1.9", "@react-navigation/stack": "^7.3.2", + "@tanstack/react-query": "^5.100.10", "react": "19.0.0", "react-native": "0.79.2", "react-native-gesture-handler": "2.29.1", diff --git a/example/src/App.tsx b/example/src/App.tsx index 0d193a0a..91e0b9eb 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -11,6 +11,7 @@ import { import { NavigationContainer, useNavigation } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; import AsyncStorage from '@react-native-async-storage/async-storage'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { PagesList, type PageItem } from './PagesList'; import { HomeMenu } from './shared/HomeMenu'; @@ -95,38 +96,42 @@ function HomeScreen({ navigation }: { navigation: any }) { ); } +const queryClient = new QueryClient(); + export default function App() { return ( - - - + + - {PagesList.map(({ id, component, name }) => ( + > - ))} - - + {PagesList.map(({ id, component, name }) => ( + + ))} + + + ); } diff --git a/example/src/exercisers/RiveToReactNativeExample.tsx b/example/src/exercisers/RiveToReactNativeExample.tsx index 54b9ece6..d583c90a 100644 --- a/example/src/exercisers/RiveToReactNativeExample.tsx +++ b/example/src/exercisers/RiveToReactNativeExample.tsx @@ -7,6 +7,7 @@ import { Switch, } from 'react-native'; import { useEffect, useMemo, useState } from 'react'; +import { useQuery } from '@tanstack/react-query'; import Animated, { runOnUI, useSharedValue, @@ -89,27 +90,31 @@ export default function RiveToReactNativeExample() { } function WithViewModelSetup({ file }: { file: RiveFile }) { - // eslint-disable-next-line @typescript-eslint/no-deprecated -- replaced with async API in next PR - const viewModel = useMemo(() => file.defaultArtboardViewModel(), [file]); - const instance = useMemo( - // eslint-disable-next-line @typescript-eslint/no-deprecated - () => viewModel?.createDefaultInstance(), - [viewModel] - ); const [useUIThread, setUseUIThread] = useState(true); - if (!instance || !viewModel) { + const { data: instance, error } = useQuery({ + queryKey: ['bouncing-ball-instance', file], + queryFn: async () => { + const vm = await file.defaultArtboardViewModelAsync(); + if (!vm) throw new Error('No view model found.'); + const inst = await vm.createDefaultInstanceAsync(); + if (!inst) throw new Error('Failed to create view model instance'); + return inst; + }, + }); + + if (error) { return ( - - {!viewModel - ? 'No view model found.' - : 'Failed to create view model instance'} - + {error.message} ); } + if (!instance) { + return ; + } + return (