Commit c47a035 1 parent 42fa4a6 commit c47a035 Copy full SHA for c47a035
File tree 3 files changed +24
-14
lines changed
packages/rn-tester/js/examples/Dimensions
3 files changed +24
-14
lines changed Original file line number Diff line number Diff line change 8
8
* @flow
9
9
*/
10
10
11
- import EventEmitter from '../vendor/emitter/EventEmitter' ;
11
+ import EventEmitter , {
12
+ type EventSubscription ,
13
+ } from '../vendor/emitter/EventEmitter' ;
12
14
import RCTDeviceEventEmitter from '../EventEmitter/RCTDeviceEventEmitter' ;
13
15
import NativeDeviceInfo , {
14
16
type DisplayMetrics ,
@@ -100,24 +102,28 @@ class Dimensions {
100
102
* are the same as the return values of `Dimensions.get('window')` and
101
103
* `Dimensions.get('screen')`, respectively.
102
104
*/
103
- static addEventListener ( type : 'change' , handler : Function ) {
105
+ static addEventListener (
106
+ type : 'change' ,
107
+ handler : Function ,
108
+ ) : EventSubscription {
104
109
invariant (
105
110
type === 'change' ,
106
111
'Trying to subscribe to unknown event: "%s"' ,
107
112
type ,
108
113
) ;
109
- eventEmitter . addListener ( type , handler ) ;
114
+ return eventEmitter . addListener ( type , handler ) ;
110
115
}
111
116
112
117
/**
113
- * Remove an event handler .
118
+ * @deprecated Use `remove` on the EventSubscription from `addEventListener` .
114
119
*/
115
120
static removeEventListener ( type : 'change' , handler : Function ) {
116
121
invariant (
117
122
type === 'change' ,
118
123
'Trying to remove listener for unknown event: "%s"' ,
119
124
type ,
120
125
) ;
126
+ // NOTE: This will report a deprecation notice via `console.error`.
121
127
eventEmitter . removeListener ( type , handler ) ;
122
128
}
123
129
}
Original file line number Diff line number Diff line change @@ -25,13 +25,13 @@ export default function useWindowDimensions(): DisplayMetrics {
25
25
setDimensions ( window ) ;
26
26
}
27
27
}
28
- Dimensions . addEventListener ( 'change' , handleChange ) ;
28
+ const subscription = Dimensions . addEventListener ( 'change' , handleChange ) ;
29
29
// We might have missed an update between calling `get` in render and
30
30
// `addEventListener` in this handler, so we set it here. If there was
31
31
// no change, React will filter out this update as a no-op.
32
32
handleChange ( { window : Dimensions . get ( 'window' ) } ) ;
33
33
return ( ) => {
34
- Dimensions . removeEventListener ( 'change' , handleChange ) ;
34
+ subscription . remove ( ) ;
35
35
} ;
36
36
} , [ dimensions ] ) ;
37
37
return dimensions ;
Original file line number Diff line number Diff line change 8
8
* @flow
9
9
*/
10
10
11
+ import type { EventSubscription } from 'react-native/Libraries/vendor/emitter/EventEmitter' ;
11
12
import { Dimensions , Text , useWindowDimensions } from 'react-native' ;
12
13
import * as React from 'react' ;
13
14
@@ -19,20 +20,23 @@ class DimensionsSubscription extends React.Component<
19
20
dims : Dimensions . get ( this . props . dim ) ,
20
21
} ;
21
22
23
+ _dimensionsSubscription : ?EventSubscription ;
24
+
22
25
componentDidMount ( ) {
23
- Dimensions . addEventListener ( 'change' , this . _handleDimensionsChange ) ;
26
+ this . _dimensionsSubscription = Dimensions . addEventListener (
27
+ 'change' ,
28
+ dimensions => {
29
+ this . setState ( {
30
+ dims : dimensions [ this . props . dim ] ,
31
+ } ) ;
32
+ } ,
33
+ ) ;
24
34
}
25
35
26
36
componentWillUnmount ( ) {
27
- Dimensions . removeEventListener ( 'change' , this . _handleDimensionsChange ) ;
37
+ this . _dimensionsSubscription ?. remove ( ) ;
28
38
}
29
39
30
- _handleDimensionsChange = dimensions => {
31
- this . setState ( {
32
- dims : dimensions [ this . props . dim ] ,
33
- } ) ;
34
- } ;
35
-
36
40
render ( ) {
37
41
return < Text > { JSON . stringify ( this . state . dims , null , 2 ) } </ Text > ;
38
42
}
You can’t perform that action at this time.
0 commit comments