<div class="center"> <h1>React Responsiveness</h1> </div>
npm install react-responsivenessWhat - Tiny plugin for working with responsiveness intervals, developed with a focus on ease of use (DX) and runtime performance.
Why - I am a bit obsessed with both performance and ease of use. See how it works.
#### yarn
``terminal`
yarn add react-responsiveness
#### npm
`terminal`
npm i react-responsiveness
#### A) Add provider
Show example
`tsx
import { ResponsivenessProvider, Presets } from "react-responsiveness";
function App() {
// ...
}
const WithResponsiveness = () => (
);
export default WithResponsiveness;
`
#### B) Use in any component
Show example
`tsx
import { useResponsiveness } from "react-responsiveness";
const { isMin, isMax, isOnly, currentInterval } = useResponsiveness()
return (<>
Available presets:
Bootstrap_3, Bootstrap_4, Bootstrap_5, Bulma, Chakra, Foundation, Ionic, Material_Design, Materialize, Material_UI, Quasar, Semantic_UI, Skeleton, Tailwind_CSS, Windi_CSS_Notes:_
- Default breakpoints value is _already set_ to Bootstrap 5's responsiveness breakpoints preset.
Show preset details
`tsx
Presets.Bootstrap_5 = {
xs: 0,
sm: 576,
md: 768,
lg: 992,
xl: 1200,
xxl: 1400,
};
`
- If you maintain a CSS framework (or use one often) and want its preset added, open an issue or a PR.
- If you spot any inaccuracy in presets (either typo or due to library update), please, let me know, I'll correct it.
Can I add my own intervals? Of course:
`tsx
breakpoints={{
small: 0,
medium: 777,
large: 1234,
}}
>
// ...
`
Show usage example
`tsx
import { useResponsiveness } from "react-responsiveness";const { isOnly } = useResponsiveness()
return (<>
{isOnly('medium') && (
// @media (min-width: 777px) and (max-width: 1233.9px)
content...
)}
>)
`
F.A.Q.
#### My IDE's TypeScript service does not pick up the types for the package. Is there a way to fix it?
Show answer
I've noticed this weird problem in some codesandbox.io instances.
This seems to fix it:
`ts
// src/react-responsiveness.d.ts
declare module "react-responsiveness" {
export * from "react-responsiveness/dist/index"
}
`
Re-exporting types from where they are declared in package.json doesn't make much sense, but it keeps TS happy.
Another way to fix it is to restart the TS service, but it doesn't always work.
How it works:
window.matchMedia(queryString) and only reacts to changes in the query's matches value. It's the same API powering CSS media queries
- listeners are placed on the MediaQueryList instances, meaning they are garbage collected as soon as the app is unmounted, without leaving bound events behind on or window object
- no global pollution
- in terms of memory and/or CPU consumption, listening to window.matchMadia 'change' events is a few hundred times lighter than using the _"traditional"_ resize` event listener methodHappy coding!
:: }<(((*> ::