react-measure

? Compute measurements of a React component.

  • 所有者: souporserious/react-measure
  • 平台:
  • 許可證: MIT License
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

? React Measure

npm version
Dependency Status

Compute measurements of React components. Uses a
ResizeObserver
to detect when an element's dimensions have changed.

Includes a
polyfill for ResizeObserver
in unsupported browsers.

Install

yarn add react-measure

npm install react-measure --save

<script src="https://unpkg.com/react-measure/dist/index.umd.js"></script>
(UMD library exposed as `ReactMeasure`)

Measure Component

Wrap any child component and calculate its client rect.

Props

client: PropTypes.bool

Adds the following to contentRect.client returned in the child function.

clientTop,
clientLeft,
clientWidth,
and
clientHeight.

offset: PropTypes.bool

Adds the following to contentRect.offset returned in the child function.

offsetTop,
offsetLeft,
offsetWidth,
and
offsetHeight.

scroll: PropTypes.bool

Adds the following to contentRect.scroll returned in the child function.

scrollTop,
scrollLeft,
scrollWidth,
and
scrollHeight.

bounds: PropTypes.bool

Uses
getBoundingClientRect
to calculate the element rect and add it to contentRect.bounds returned in the
child function.

margin: PropTypes.bool

Uses
getComputedStyle
to calculate margins and add it to contentRect.margin returned in the child
function.

innerRef: PropTypes.func

Use this to access the internal component ref.

onResize: PropTypes.func

Callback invoked when either element width or height have changed. Note that this will be called twice on mount to get the initial values. The first call will come from componentDidMount while the second call will come from the ResizeObserver.

children: PropTypes.func

Children must be a function. Will receive the following object shape:

  • measureRef: must be passed down to your component's ref in order to obtain a
    proper node to measure

  • measure: use to programmatically measure your component, calls the internal
    measure method in withContentRect

  • contentRect: this will contain any of the following allowed rects from
    above: client, offset, scroll, bounds, or margin. It will also
    include entry from the ResizeObserver when available.

Example

import Measure from 'react-measure'
import classNames from 'classnames'

class ItemToMeasure extends Component {
  state = {
    dimensions: {
      width: -1,
      height: -1,
    },
  }

  render() {
    const { width, height } = this.state.dimensions
    const className = classNames(width < 400 && 'small-width-modifier')

    return (
      <Measure
        bounds
        onResize={contentRect => {
          this.setState({ dimensions: contentRect.bounds })
        }}
      >
        {({ measureRef }) => (
          <div ref={measureRef} className={className}>
            I can do cool things with my dimensions now :D
            {height > 250 && (
              <div>Render responsive content based on the component size!</div>
            )}
          </div>
        )}
      </Measure>
    )
  }
}

withContentRect(types) HoC

A higher-order component that provides dimensions to the wrapped component.
Accepts types, which determines what measurements are returned, similar to
above. Then returns a function to pass the component you want measured.

Pass an array or single value of either client, offset, scroll, bounds,
or margin to calculate and receive those measurements as the prop
contentRect in your wrapped component. You can also use the measure function
passed down to programmatically measure your component if you need to. And
finally, remember to pass down the measureRef to the component you want
measured.

Passes down the same props as the Measure child function above, measureRef,
measure, and contentRect.

Fun fact, the Measure component is a thin wrapper around withContentRect.
Just check
the source.
This means your wrapped component will accept the same props as Measure does
?

Example

import { withContentRect } from 'react-measure'

const ItemToMeasure = withContentRect('bounds')(
  ({ measureRef, measure, contentRect }) => (
    <div ref={measureRef}>
      Some content here
      <pre>{JSON.stringify(contentRect, null, 2)}</pre>
    </div>
  )
)

Run Example

clone repo

git clone git@github.com:souporserious/react-measure.git

move into folder

cd ~/react-measure

install package dependencies

yarn

move into site folder and install local site dependencies

cd ~/site && yarn

run development mode

yarn gatsby develop

主要指標

概覽
名稱與所有者souporserious/react-measure
主編程語言JavaScript
編程語言JavaScript (語言數: 2)
平台
許可證MIT License
所有者活动
創建於2015-09-15 04:15:44
推送於2020-09-11 02:19:27
最后一次提交
發布數58
最新版本名稱v2.5.2 (發布於 2020-09-08 23:53:43)
第一版名稱0.0.1 (發布於 2015-09-14 21:16:12)
用户参与
星數1.9k
關注者數14
派生數93
提交數215
已啟用問題?
問題數98
打開的問題數30
拉請求數40
打開的拉請求數0
關閉的拉請求數13
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?