@@ -17,19 +17,28 @@ const useMultiPolling = <PollingInput>(
1717 const completedOnboarding = useSelector ( getCompletedOnboarding ) ;
1818 const pollingTokens = useRef < Map < string , string > > ( new Map ( ) ) ;
1919
20+ const prevPollingInputStringified = useRef < string | null > ( null ) ;
21+ const hasPollingInputChanged =
22+ JSON . stringify ( usePollingOptions . input ) !==
23+ prevPollingInputStringified . current ;
24+
25+ const isMounted = useRef ( true ) ;
26+
2027 useEffect ( ( ) => {
21- if ( ! completedOnboarding ) {
22- // don't start polling if no selected account or onboarding is not completed yet
28+ if ( ! completedOnboarding || ! hasPollingInputChanged ) {
29+ // don't start polling if no selected account, or onboarding is incomplete, or polling inputs haven't changed
2330 return ;
2431 }
2532
2633 // start new polls
2734 for ( const input of usePollingOptions . input ) {
2835 const key = JSON . stringify ( input ) ;
2936 if ( ! pollingTokens . current . has ( key ) ) {
30- usePollingOptions
31- . startPolling ( input )
32- . then ( ( token ) => pollingTokens . current . set ( key , token ) ) ;
37+ usePollingOptions . startPolling ( input ) . then ( ( token ) => {
38+ if ( isMounted . current ) {
39+ pollingTokens . current . set ( key , token ) ;
40+ }
41+ } ) ;
3342 }
3443 }
3544
@@ -44,17 +53,20 @@ const useMultiPolling = <PollingInput>(
4453 pollingTokens . current . delete ( inputKey ) ;
4554 }
4655 }
47- } , [
48- completedOnboarding ,
49- usePollingOptions . input && JSON . stringify ( usePollingOptions . input ) ,
50- ] ) ;
56+
57+ prevPollingInputStringified . current = JSON . stringify (
58+ usePollingOptions . input ,
59+ ) ;
60+ } , [ usePollingOptions , hasPollingInputChanged , completedOnboarding ] ) ;
5161
5262 // stop all polling on dismount
5363 useEffect ( ( ) => {
5464 return ( ) => {
5565 for ( const token of pollingTokens . current . values ( ) ) {
5666 usePollingOptions . stopPollingByPollingToken ( token ) ;
5767 }
68+ prevPollingInputStringified . current = null ;
69+ isMounted . current = false ;
5870 } ;
5971 } , [ ] ) ;
6072} ;
0 commit comments