react-modern-hooks v1.0.12
React Modern Hooks
React modern hooks is a library for customized and reusable hooks. These hooks depend on react library under the hood.
Disclaimer: atleast react version 16.8 is required for the hooks
Installation
npm install react-modern-hooksor
yarn add react-modern-hooksIssues
Having issues setting up or using this hooks library, file a bug report here
Documentation
You can find the complete React Modern Hooks documentation on the website
Complete List of Available Hooks
useFetch- Hook for fetching/refetching data from an API endpointuseNetwork- Hook for getting the network statususeFullScreen- Hook to toggle a given HTMLElement to fullscreen and exit fullscreenuseGeolocation- Hook to get a users current geographic locationuseSelectedText- Hook to get the highlighted text on a pageuseCopyToClipboad- Hook to copy text to clipboaduseStateCallback- Hook that acts as a state callback i.e. functionality same as react class-based setState that provides a fallback with your current set stateuseResize- Hook to handle page resizinguseSearch- Hook to allow delayed search and only search after a user releases all keys for set timeoutuseImageDownload- Hook that allows download of images from a given urluseFocus- Hook to autofocus input and/or textarea componentsuseDebounce- Hook to for delayed callback functionsuseStorage- Hook to allow use of localstorageuseOs- Hook to get the current OS of the userAgentusePageTitle- Hook to update the page title of a document urluseOnline- Hook to check if user is currently online or offlineuseDeviceDetect- Hook to detect the device a user is using and/or if either mobile or not
Examples
We have several examples and complete guide on the website. Here are a few to get you started:
useFetch
Hook for fetching/refetching data from an API endpoint
Usage
import { useFetch } from 'react-modern-hooks';
const Demo = () => {
const { data, loading, refetch, processRequest, error } = useFetch('https://jsonplaceholder.typicode.com/todos');
if (loading) return <p>Loading...</p>;
if (error || !data) return <p>{error}</p>;
const handleRequest = () => {
processRequest('https://jsonplaceholder.typicode.com/todos', {
method: 'POST',
});
};
return (
<div>
<p>Data Fetched</p>
<button onClick={refetch}>Refetch</button>
<button onClick={handleRequest}>Click to Process New Request</button>
</div>
);
};Reference
Input Variables
url - The API endpoint to fetch data from
options - optional parameters allowed to be passed when fetching data from an endpoint
Output Variables
data - returned data from the api endpoint
error - Error response returned incase something goes wrong during data fetching
loading - Loading state returned when data is still loading from the API endpoint
refetch - Refetch function to refetch data
processRequest - A helper function to process requests made via POST or PATCH or DELETE methods
useNetwork
A React Hook that gets the users network information and which provides information about the connection a device is using to communicate with the network and provides a means for scripts to be notified if the connection type changes
Usage
import { useNetwork } from 'react-modern-hooks';
const Demo = () => {
const { connection } = useNetwork();
connection.onchange = (e) => {
// Handle change of connection type here.
};
return (
<div>
<h1>Network Info</h1>
<p>Downlink: {connection.downlink} </p>
<p>Downlink Max: {connection.downlinkMax}</p>
<p>Round trip time: {connection.rtt}</p>
<p>Has user set a reduced data usage option on the user agent: {connection.saveData}</p>
<p>Connection Type: {connection.type}</p>
</div>
);
};References
Output Variables
connection - The connection response of the network
useFullScreen
A React hook that enables a HTMLElement or component to toggle into a fullscreen and/or exit fullscreen. This hooks provides the open, close and toggle methods which can be used to switch the screen from open to closed or viceversa.
Usage
import { useRef } from 'react';
import { useFullScreen } from 'react-modern-hooks';
const Demo = () => {
const ref = useRef(null);
const { fullScreen, close, open, toggle, error } = useFullScreen(ref);
if (error) {
console.log('Error: ', error);
}
return (
<div>
<div ref={ref} style={{ background: '#fff' }}>
<h1> This is the div (one with ref) that will enter fullscreen mode</h1>
{fullScreen ? <p>Only visible in fullscreen mode</p> : <p>Not in fullscreen mode</p>}
<button onClick={() => open()}>Open FullScreen</button>
<button onClick={() => close()}>Exit FullScreen</button>
<button onClick={() => toggle()}>Toggle Open/Exit FullScreen</button>
</div>
</div>
);
};References
Input Variables
ref - A HTMLElement mutable ref object to toggle to fullscreen
onExit - An optional callback function to run when exiting fullscreen
Output Variables
fullScreen - A boolean value to show if fullscreen or not
open - A function to open the referenced component/element to fullscreen window
close - A function to close/exit the referenced component/element from fullscreen window
toggle - A function to both open and/or close/exit the referenced component/element to and from fullscreen window
error - An error message incase something doesn't go right on opening and/or closing fullscreen window
useGeolocation
A react hook which gets a users/agent's current geographic location. It return both the city, ip, country and other location variables useful in determining a users position on the world map
Usage
import { useGeolocation } from 'react-modern-hooks';
const Demo = () => {
const {
loading,
error,
userIP,
city,
country,
latitude,
longitude,
region,
location, //Object that comes with other properties on top
} = useGeolocation();
if (error) {
console.log('Error: ', error);
}
if (loading) return <p>Loading...</p>;
return (
<div>
<p>User IP Address: {userIP}</p>
<p>City: {city}</p>
<p>Country: {country}</p>
<p>Region: {region}</p>
<p>Longitude: {longitude}</p>
<p>Latitude: {latitude}</p>
<p>Location Timezone: {location?.timezone}</p>
</div>
);
};References
Output Variables
location - Location object with all other user details
latitude - Current latitude of a user/agent's position
longitude - Current longitude of a user/agent's position
userIP - Current IP address of a user/agent
city - City the user/agent is currently located in
region - Region the user/agent is currently located in
country - Country the user/agent is currently located in
error - Any error occurring during geolocating a user/agent
loading - A boolean variable indicating if a users location is still being fetched
useCopyToClipboard
A React Hook that allows copying of text to clipboad. Providing the capability to copy text from one medium to another. The hook provides a copyText method which can be used to copy the text
Usage
import { useCopyToClipboard } from 'react-modern-hooks';
const Demo = () => {
const { copiedText, copyText, error, copied } = useCopyToClipboard();
console.log('is text copied', copied);
return (
<div>
{error ? <p>Error copying text: {error}</p> : null}
<button onClick={() => copyText('Copy this text to clipboard')}>Copy Text to clipboard</button>
</div>
);
};References
Output Variables
error - Error message that occured during copy
copied - Boolean state if the text was copied successfully
copiedText - The copied text
copyText - A function to copy the text