Handle element resizes like it's 2019!
Nowadays browsers have started to support element resize handling natively using ResizeObservers. We use this feature (with a polyfill) to help you handle element resizes in React.
Demo
Live demo
Local demo:
git clone https://github.com/maslianok/react-resize-detector.git cd react-resize-detector/examples npm i && npm start Installation
npm i react-resize-detector // OR yarn add react-resize-detector Examples
1. Callback Pattern
import React, { PureComponent } from 'react'; import { render } from 'react-dom'; import ReactResizeDetector from 'react-resize-detector'; class App extends PureComponent { render() { return ( <div> ... <ReactResizeDetector handleWidth handleHeight onResize={this.onResize} /> </div> ); } onResize = () => { ... } } render(<App />, document.getElementById('root'));2. Child Function Pattern
<ReactResizeDetector handleWidth handleHeight> {({ width, height }) => <div>{`${width}x${height}`}</div>} </ReactResizeDetector>3. Child Component Pattern
const CustomComponent = ({ width, height }) => <div>{`${width}x${height}`}</div>; // ... <ReactResizeDetector handleWidth handleHeight> <CustomComponent /> </ReactResizeDetector>;4. HOC pattern
import { withResizeDetector } from 'react-resize-detector'; const CustomComponent = ({ width, height }) => <div>{`${width}x${height}`}</div>; export default withResizeDetector(CustomComponent);5. Render prop pattern
<ResizeDetector handleWidth handleHeight render={({ width, height }) => ( <div> Width:{width}, Height:{height} </div> )} />API
| Prop | Type | Description | Default |
|---|---|---|---|
| onResize | Func | Function that will be invoked with width and height arguments | undefined |
| handleWidth | Bool | Trigger onResize on width change | false |
| handleHeight | Bool | Trigger onResize on height change | false |
| skipOnMount | Bool | Do not trigger onResize when a component mounts | false |
| refreshMode | String | Possible values: throttle and debounce See lodash docs for more information. undefined - callback will be fired for every frame | undefined |
| refreshRate | Number | Use this in conjunction with refreshMode. Important! It's a numeric prop so set it accordingly, e.g. refreshRate={500} | 1000 |
| refreshOptions | Object | Use this in conjunction with refreshMode. An object in shape of { leading: bool, trailing: bool }. Please refer to lodash's docs for more info | undefined |
| querySelector | String | A selector of an element to observe. You can use this property to attach resize-observer to any DOM element. Please refer to the querySelector docs | undefined |
| targetDomEl | DOM element | A DOM element to observe. By default it's a parent element in relation to the ReactResizeDetector component. But you can pass any DOM element to observe. This property is omitted when you pass querySelector | undefined |
| nodeType | node | Valid only for a callback-pattern. Ignored for other render types. Set resize-detector's node type. You can pass any valid React node: string with node's name or element. Can be useful when you need to handle table's or paragraph's resizes | div |
License
MIT