npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-resize-sensor

v1.0.1

Published

Resize Sensor for React Components

Downloads

11

Readme

React Resize Sensor

Resize Sensor for React Components.

Install

npm install --save react-resize-sensor

Why?

When building highly interactive user interfaces composed of many portable UI components that need to look good no matter what layout space they are dropped into, you might find that Media Queries fall flat on their face for several reasons.

A few of those reasons:

  1. Media queries depend on the window dimensions. There are more things that can affect a UI component's dimensions than just the window resize. Maybe you want to give the user controls that affect the interface layout?
  2. Media queries are global, outside the component's control, and thus risk interference from things outside the UI component's control. Globals are evil when you want to compose your interface of many small, portable, reusable components. Overriding styles all over the place just to fit components into multiple custom layouts gets messy quickly.
  3. Media queries are limited to only allowing style changes. You may want to do more than just change styles. And maybe you want the full power of javascript to control how the component responds to it's given dimensions. Example: redraw a graphic on html canvas with the canvas' new dimensions.

And for those of you who may be eagerly awaiting Element Queries, reread 2 and 3.

How?

We place an iframe in your component. Then call your handler when we get a resize event on the iframe's internal window. Really simple. Correct results every time.

However, We have to make some tradeoffs for the simplicity and reliability of this technique. The caveat: iframes are slow. But not noticeable until you have a sufficient number of them on the page. So I considered this to be a tolerable tradeoff.

There are other techniques out there. Pull requests welcome.

Usage

Import:

var ResizeSensor = require('react-resize-sensor');

The module is CommonJS format. I leave compilation up to you. Maybe you like to import instead of require. I assume you are smart enough to figure it out.

Then, place sensor in your render method and set root style position:

<div style={{position: 'relative'}}>
  <ResizeSensor onResize={this._handleResize} />
</div>

Isomorphic wat?

The ResizeSensor uses a global and binds a DOM event. See source code for more details. This may or may not jive with your isomorphic astronauts. If you don't know or care what "isomorphic" means, forget about it.