@mwatson/usewindowwidth

1.0.4-1 • Public • Published

@mwatson/useWindowWidth

How to Use

In order to use this module, import it at the top of a component.

import React from 'react'
import { useWindowWidth } from '@mwatson/usewindowwidth'

// ...

Then, within the component definition, destructure the windowWidth variable and the necessary size variables, XS, SM, MD, and LG.

export const SomeComponent = ({ children }) => {
    const { windowWidth, XS, SM, MD, LG } = useWindowWidth()

    // ...
}

The windowWidth variable is a number corresponding to the window width in pixels, that one would obtain from window.innerWidth`. The size variables are integers corresponding to common breakpoints.

Commonly, this would be used for conditional rendering.

Conditional Rendering

1. Alter inline styles according to window width

//...
<ul style={{
    display: 'flex',
    flexDirection: windowWidth <= XS ? 'column' : 'row',
}}>
    <li>Item One</li>
    <li>Item Two</li>
    <li>Item Three</li>
</ul>

2. Pass window-width-based booleans to styled components

const Block = styled.div`
    padding: ${ props => props.compact ? '2rem' : '1rem' };
`

const SomeComponent = props => (
    <Block compact={ windowWidth > SM }>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Animi tempora error repudiandae facilis! Ipsum enim fuga sunt accusantium natus, quae ea quo nulla cum iure. Rem a dicta, iste porro.
    </Block>
)

3. Render ifferent components based on window size

Suppose you have two menus--a mobile menu component called <MobileMenu /> and a menu component for larger screens called <Menu />.

Then they can be conditionally rendered as show below:

    <div>
        { windowWidth <= SM && <MobileMenu /> }
        { windowWidth > SM && <Menu /> }
    </div>
}

or

    <div>
        { windowWidth <= SM ? <MobileMenu /> : <Menu /> }
    </div>

Rendering the Size of the Window

Of course, the window width can be output directly as shown below.

<p>This window is { windowWidth } pixels wide</p>

Alternatively, it may be useful (at least for debuggin) to display the window size, as shown here.

<div>
    The window size is {
        windowWidth <= XS ? 'extra small'
            : windowWidth <= SM ? 'small'
            : windowWidth <= MD ? 'medium'
            : windowWidth <= LG ? 'large'
            : 'extra large'
    }.
</div>

Readme

Keywords

none

Package Sidebar

Install

npm i @mwatson/usewindowwidth

Weekly Downloads

0

Version

1.0.4-1

License

ISC

Unpacked Size

3.75 kB

Total Files

3

Last publish

Collaborators

  • mwatson