Hooks contains our logic code in our React app.
We can create our own hooks and use hooks provided by other people.
In this article, we’ll look at some useful React hooks.
React Cool Dimensions
React Cool Dimensions lets us watch the dimension of a component.
To use it, we install it by running:
yarn add react-cool-dimensions
or
npm install --save react-cool-dimensions
Then we can use it by writing:
import React from "react";
import useDimensions from "react-cool-dimensions";
export default function App() {
const { ref, ...dimensions } = useDimensions({
onResize: ({ width, height, entry, unobserve, observe }) => {
//...
}
});
return (
<div className="App">
<div ref={ref}>{JSON.stringify(dimensions)}</div>
</div>
);
}
We use the useDimensions hook which returns the ref that we can assign to the element we want to watch the size for.
Then dimensions has the object with width and height of the element we’re watching.
onResize is a method that runs when we resize the element.
We can also assign breakpoints so the hook can determine the breakpoint when watching the element size.
For instance, we can write:
import React from "react";
import useDimensions from "react-cool-dimensions";
export default function App() {
const { ref, ...dimensions } = useDimensions({
breakpoints: { XS: 0, SM: 320, MD: 480, LG: 640 },
onResize: ({ currentBreakpoint }) => {
console.log(currentBreakpoint);
}
});
return (
<div className="App">
<div ref={ref}>{JSON.stringify(dimensions)}</div>
</div>
);
}
We added the breakpoints property to get the breakpoints according to what we assigned.
All the dimensions are in pixels.
We can include the border size with the measurement.
For instance, we can write:
import React from "react";
import useDimensions from "react-cool-dimensions";
export default function App() {
const { ref, ...dimensions } = useDimensions({
useBorderBoxSize: true
});
return (
<div className="App">
<div
ref={ref}
style={{
border: "5px solid grey"
}}
>
{JSON.stringify(dimensions)}
</div>
</div>
);
}
Then the border is included with the measurements.
To throttle the watching, we can throttle the onResize callback calls with the Lodash throttle method.
We can also create our own ref and pass it into the useDimensions hook’s object argument’s ref property.
React Cool Onclickoutside
React Cool Onclickoutside lets us detect clicks outside an element.
To install it, we run:
yarn add react-cool-onclickoutside
or:
npm install --save react-cool-onclickoutside
Then we can use it by writing:
import React from "react";
import useOnclickOutside from "react-cool-onclickoutside";
export default function App() {
const [openMenu, setOpenMenu] = React.useState(false);
const ref = useOnclickOutside(() => {
setOpenMenu(false);
});
const handleClickBtn = () => {
setOpenMenu(!openMenu);
};
return (
<div>
<button onClick={handleClickBtn}>Button</button>
{openMenu && <div ref={ref}>Menu</div>}
</div>
);
}
useOnclickOutside is the hook that comes with the package to detect clicks outside an element.
It returns a ref which we can pass into the ref prop of the element we want to watch the clicks outside for.
Now when we click outside the menu div, the menu will disappear.
Conclusion
React Cool Dimensions lets us watch the dimensions of our elements.
React Cool Onclickoutside lets us detect clicks that are outside an element.