@@ -7,10 +7,11 @@ import {
77 TextInput ,
88 ScrollView ,
99} from 'react-native' ;
10- import { useRef , useMemo } from 'react' ;
10+ import { useRef , useState , useEffect } from 'react' ;
1111import {
1212 Fit ,
1313 RiveView ,
14+ type ViewModel ,
1415 type ViewModelInstance ,
1516 type RiveFile ,
1617 useRiveFile ,
@@ -79,15 +80,27 @@ function MenuListContent({
7980 error,
8081 } = useRiveList ( 'menu' , instance ) ;
8182
82- const listItemViewModel = useMemo (
83- ( ) => file . viewModelByName ( 'listItem' ) ,
84- [ file ]
85- ) ;
83+ const [ listItemViewModel , setListItemViewModel ] = useState <
84+ ViewModel | undefined
85+ > ( undefined ) ;
86+
87+ useEffect ( ( ) => {
88+ let cancelled = false ;
89+ file
90+ . viewModelByNameAsync ( 'listItem' )
91+ . then ( ( vm ) => {
92+ if ( ! cancelled ) setListItemViewModel ( vm ?? undefined ) ;
93+ } )
94+ . catch ( ( e ) => console . error ( 'Failed to load listItem view model:' , e ) ) ;
95+ return ( ) => {
96+ cancelled = true ;
97+ } ;
98+ } , [ file ] ) ;
8699
87- const addNewMenuItem = ( label : string ) => {
100+ const addNewMenuItem = async ( label : string ) => {
88101 if ( ! listItemViewModel ) return ;
89102
90- const newMenuItemVmi = listItemViewModel . createInstance ( ) ;
103+ const newMenuItemVmi = await listItemViewModel . createBlankInstanceAsync ( ) ;
91104 if ( ! newMenuItemVmi ) return ;
92105
93106 const labelProperty = newMenuItemVmi . stringProperty ( 'label' ) ;
@@ -96,9 +109,9 @@ function MenuListContent({
96109
97110 if ( ! labelProperty || ! hoverColorProperty || ! fontIconProperty ) return ;
98111
99- labelProperty . value = label ;
100- hoverColorProperty . value = 0xff323232 ;
101- fontIconProperty . value = '' ;
112+ labelProperty . set ( label ) ;
113+ hoverColorProperty . set ( 0xff323232 ) ;
114+ fontIconProperty . set ( '' ) ;
102115
103116 lastAdded . current = newMenuItemVmi ;
104117 addInstance ( newMenuItemVmi ) ;
@@ -126,7 +139,7 @@ function MenuListContent({
126139 const menuItemLabel = menuItem . stringProperty ( 'label' ) ;
127140 if ( ! menuItemLabel ) return ;
128141
129- menuItemLabel . value = label ;
142+ menuItemLabel . set ( label ) ;
130143 } ;
131144
132145 return (
0 commit comments