Skip to content

Commit e548e4e

Browse files
committed
chore(examples): prevent state updates after unmount
1 parent 3bdf09e commit e548e4e

3 files changed

Lines changed: 14 additions & 4 deletions

File tree

examples/demo/src/hooks/useOneSignal.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ export function useOneSignal(): UseOneSignalReturn {
153153
}, []);
154154

155155
useEffect(() => {
156+
let cancelled = false;
157+
156158
const handleIamWillDisplay = (e: InAppMessageWillDisplayEvent) => {
157159
console.log(`IAM willDisplay: ${e.message.messageId}`);
158160
};
@@ -271,6 +273,7 @@ export function useOneSignal(): UseOneSignalReturn {
271273
OneSignal.User.pushSubscription.getOptedInAsync(),
272274
OneSignal.Notifications.hasPermission(),
273275
]);
276+
if (cancelled) return;
274277

275278
setAppId(nextAppId);
276279
setConsentRequiredState(nextConsentRequired);
@@ -284,6 +287,7 @@ export function useOneSignal(): UseOneSignalReturn {
284287
setIsReady(true);
285288

286289
const initialOnesignalId = await OneSignal.User.getOnesignalId();
290+
if (cancelled) return;
287291
if (initialOnesignalId) {
288292
await fetchUserDataFromApi();
289293
}
@@ -296,6 +300,7 @@ export function useOneSignal(): UseOneSignalReturn {
296300

297301
console.log('Loaded OneSignal');
298302
return () => {
303+
cancelled = true;
299304
console.log('Cleaning up OneSignal listeners');
300305
OneSignal.InAppMessages.removeEventListener('willDisplay', handleIamWillDisplay);
301306
OneSignal.InAppMessages.removeEventListener('didDisplay', handleIamDidDisplay);

examples/demo_pods/src/App.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { StatusBar, Style } from '@capacitor/status-bar';
2-
import { IonApp, IonRouterOutlet, setupIonicReact } from '@ionic/react';
2+
import { IonApp, setupIonicReact } from '@ionic/react';
33
import { IonReactRouter } from '@ionic/react-router';
4-
import { Redirect, Route } from 'react-router-dom';
4+
import { Redirect, Route, Switch } from 'react-router-dom';
55

66
import HomeScreen from './pages/HomeScreen';
77
import Secondary from './pages/Secondary';
@@ -31,7 +31,7 @@ setupIonicReact();
3131
const App: React.FC = () => (
3232
<IonApp>
3333
<IonReactRouter>
34-
<IonRouterOutlet>
34+
<Switch>
3535
<Route exact path="/home">
3636
<HomeScreen />
3737
</Route>
@@ -41,7 +41,7 @@ const App: React.FC = () => (
4141
<Route exact path="/">
4242
<Redirect to="/home" />
4343
</Route>
44-
</IonRouterOutlet>
44+
</Switch>
4545
</IonReactRouter>
4646
</IonApp>
4747
);

examples/demo_pods/src/hooks/useOneSignal.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ export function useOneSignal(): UseOneSignalReturn {
153153
}, []);
154154

155155
useEffect(() => {
156+
let cancelled = false;
157+
156158
const handleIamWillDisplay = (e: InAppMessageWillDisplayEvent) => {
157159
console.log(`IAM willDisplay: ${e.message.messageId}`);
158160
};
@@ -271,6 +273,7 @@ export function useOneSignal(): UseOneSignalReturn {
271273
OneSignal.User.pushSubscription.getOptedInAsync(),
272274
OneSignal.Notifications.hasPermission(),
273275
]);
276+
if (cancelled) return;
274277

275278
setAppId(nextAppId);
276279
setConsentRequiredState(nextConsentRequired);
@@ -284,6 +287,7 @@ export function useOneSignal(): UseOneSignalReturn {
284287
setIsReady(true);
285288

286289
const initialOnesignalId = await OneSignal.User.getOnesignalId();
290+
if (cancelled) return;
287291
if (initialOnesignalId) {
288292
await fetchUserDataFromApi();
289293
}
@@ -296,6 +300,7 @@ export function useOneSignal(): UseOneSignalReturn {
296300

297301
console.log('Loaded OneSignal');
298302
return () => {
303+
cancelled = true;
299304
console.log('Cleaning up OneSignal listeners');
300305
OneSignal.InAppMessages.removeEventListener('willDisplay', handleIamWillDisplay);
301306
OneSignal.InAppMessages.removeEventListener('didDisplay', handleIamDidDisplay);

0 commit comments

Comments
 (0)