React Native – How to measure a view?

Use “onLayout” prop for a View

Measure component

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import React from 'react';
import { View } from 'react-native';
export type TViewLayout = {
height: number | null;
width: number | null;
x: number | null;
y: number | null;
};
interface Props {
setViewMeasure: (data: TViewLayout) => void;
}
const MeasureView: React.FC<Props> = ({ children, setViewMeasure }) => {
const onMeasureViewSize = (e: {
nativeEvent: {
layout: { height: number; width: number; x: number; y: number };
};
}) => {
setViewMeasure(e.nativeEvent.layout);
};
return <View onLayout={onMeasureViewSize}>{children}</View>;
};
export default MeasureView;
import React from 'react'; import { View } from 'react-native'; export type TViewLayout = { height: number | null; width: number | null; x: number | null; y: number | null; }; interface Props { setViewMeasure: (data: TViewLayout) => void; } const MeasureView: React.FC<Props> = ({ children, setViewMeasure }) => { const onMeasureViewSize = (e: { nativeEvent: { layout: { height: number; width: number; x: number; y: number }; }; }) => { setViewMeasure(e.nativeEvent.layout); }; return <View onLayout={onMeasureViewSize}>{children}</View>; }; export default MeasureView;
import React from 'react';
import { View } from 'react-native';

export type TViewLayout = {
  height: number | null;
  width: number | null;
  x: number | null;
  y: number | null;
};

interface Props {
  setViewMeasure: (data: TViewLayout) => void;
}

const MeasureView: React.FC<Props> = ({ children, setViewMeasure }) => {
  const onMeasureViewSize = (e: {
    nativeEvent: {
      layout: { height: number; width: number; x: number; y: number };
    };
  }) => {
    setViewMeasure(e.nativeEvent.layout);
  };
  return <View onLayout={onMeasureViewSize}>{children}</View>;
};

export default MeasureView;

Usage

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
function MeasureAButton() {
const [measurement, setMeasurement] = React.useState<TViewLayout>({
height: null,
width: null,
x: null,
y: null,
});
return (
<>
<MeasureView setViewMeasure={setMeasurement}>
<Button />
</MeasureView>
<Text>{measurement?.height}</Text>
<Text>{measurement?.width}</Text>
<Text>{measurement?.x}</Text>
<Text>{measurement?.y}</Text>
</>
);
}
function MeasureAButton() { const [measurement, setMeasurement] = React.useState<TViewLayout>({ height: null, width: null, x: null, y: null, }); return ( <> <MeasureView setViewMeasure={setMeasurement}> <Button /> </MeasureView> <Text>{measurement?.height}</Text> <Text>{measurement?.width}</Text> <Text>{measurement?.x}</Text> <Text>{measurement?.y}</Text> </> ); }
function MeasureAButton() {
  const [measurement, setMeasurement] = React.useState<TViewLayout>({
    height: null,
    width: null,
    x: null,
    y: null,
  });

  return (
    <>
      <MeasureView setViewMeasure={setMeasurement}>
          <Button />
      </MeasureView>
      <Text>{measurement?.height}</Text>
      <Text>{measurement?.width}</Text>
      <Text>{measurement?.x}</Text>
      <Text>{measurement?.y}</Text>
    </>
  );
}

Be the first to comment

Leave a Reply

Your email address will not be published.


*