Skip to content

Commit 17dceb2

Browse files
authored
Use EventSubscription to unsubscribe from BackHandler (#410)
RN 0.77.0 contains a PR removing `removeEventListener` from `BackHandler` (facebook/react-native#45892) This PR uses suggested migration of using `remove` on `EventSubscription`
1 parent 61b6ef5 commit 17dceb2

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

src/useBackHandler.test.ts

+8-5
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@ import {useBackHandler} from './useBackHandler'
22
import {renderHook} from '@testing-library/react-hooks'
33
import {BackHandler} from 'react-native'
44

5+
const removeEventListenerMock = jest.fn()
6+
57
jest.mock('react-native', () => ({
68
BackHandler: {
7-
addEventListener: jest.fn(),
8-
removeEventListener: jest.fn(),
9+
addEventListener: jest.fn().mockImplementation(() => {
10+
return {
11+
remove: removeEventListenerMock,
12+
}
13+
}),
914
},
1015
}))
1116

1217
describe('useBackHandler', () => {
1318
const addEventListenerMock = BackHandler.addEventListener as jest.Mock
14-
const removeEventListenerMock = BackHandler.removeEventListener as jest.Mock
1519

1620
beforeEach(() => {
1721
jest.clearAllMocks()
@@ -40,7 +44,7 @@ describe('useBackHandler', () => {
4044

4145
rerender({handler: handler2})
4246

43-
expect(removeEventListenerMock).toBeCalledWith('hardwareBackPress', handler)
47+
expect(removeEventListenerMock).toBeCalledTimes(1)
4448
expect(addEventListenerMock).toBeCalledWith('hardwareBackPress', handler2)
4549
})
4650

@@ -56,6 +60,5 @@ describe('useBackHandler', () => {
5660
unmount()
5761

5862
expect(removeEventListenerMock).toBeCalledTimes(1)
59-
expect(removeEventListenerMock).toBeCalledWith('hardwareBackPress', handler)
6063
})
6164
})

src/useBackHandler.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import {BackHandler} from 'react-native'
33

44
export function useBackHandler(handler: () => boolean) {
55
useEffect(() => {
6-
BackHandler.addEventListener('hardwareBackPress', handler)
6+
const subscription = BackHandler.addEventListener('hardwareBackPress', handler)
77

8-
return () => BackHandler.removeEventListener('hardwareBackPress', handler)
8+
return () => subscription.remove()
99
}, [handler])
1010
}

0 commit comments

Comments
 (0)