diff --git a/packages/rn-tester/js/examples/Dimensions/DimensionsExample.js b/packages/rn-tester/js/examples/Dimensions/DimensionsExample.js
index 008ae41cc9c..8e8d1a28da4 100644
--- a/packages/rn-tester/js/examples/Dimensions/DimensionsExample.js
+++ b/packages/rn-tester/js/examples/Dimensions/DimensionsExample.js
@@ -8,38 +8,24 @@
* @flow
*/
-import type {EventSubscription} from 'react-native/Libraries/vendor/emitter/EventEmitter';
import {Dimensions, Text, useWindowDimensions} from 'react-native';
import * as React from 'react';
+import {useState, useEffect} from 'react';
-class DimensionsSubscription extends React.Component<
- {dim: string, ...},
- {dims: Object, ...},
-> {
- state: {dims: any, ...} = {
- dims: Dimensions.get(this.props.dim),
- };
+type Props = {dim: string};
- _dimensionsSubscription: ?EventSubscription;
+function DimensionsSubscription(props: Props) {
+ const [dims, setDims] = useState(() => Dimensions.get(props.dim));
- componentDidMount() {
- this._dimensionsSubscription = Dimensions.addEventListener(
- 'change',
- dimensions => {
- this.setState({
- dims: dimensions[this.props.dim],
- });
- },
- );
- }
+ useEffect(() => {
+ const subscription = Dimensions.addEventListener('change', dimensions => {
+ setDims(dimensions[props.dim]);
+ });
- componentWillUnmount() {
- this._dimensionsSubscription?.remove();
- }
+ return () => subscription.remove();
+ }, [props.dim]);
- render(): React.Node {
- return {JSON.stringify(this.state.dims, null, 2)};
- }
+ return {JSON.stringify(dims, null, 2)};
}
const DimensionsViaHook = () => {