/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format * @flow */ import type {EventSubscription} from 'react-native/Libraries/vendor/emitter/EventEmitter'; import {Dimensions, Text, useWindowDimensions} from 'react-native'; import * as React from 'react'; class DimensionsSubscription extends React.Component< {dim: string, ...}, {dims: Object, ...}, > { state = { dims: Dimensions.get(this.props.dim), }; _dimensionsSubscription: ?EventSubscription; componentDidMount() { this._dimensionsSubscription = Dimensions.addEventListener( 'change', dimensions => { this.setState({ dims: dimensions[this.props.dim], }); }, ); } componentWillUnmount() { this._dimensionsSubscription?.remove(); } render() { return {JSON.stringify(this.state.dims, null, 2)}; } } exports.title = 'Dimensions'; exports.category = 'UI'; exports.documentationURL = 'https://reactnative.dev/docs/dimensions'; exports.description = 'Dimensions of the viewport'; exports.examples = [ { title: 'useWindowDimensions hook', render(): React.Node { const DimensionsViaHook = () => { const dims = useWindowDimensions(); return {JSON.stringify(dims, null, 2)}; }; return ; }, }, { title: 'Non-component `get` API: window', render(): React.Element { return ; }, }, { title: 'Non-component `get` API: screen', render(): React.Element { return ; }, }, ];