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

toju-react-hooks

v1.0.4

Published

toju-react-hooks library is a tool designed to facilitate React application development by providing a series of custom hooks. These hooks are designed to address common problems and frequent usage patterns in application development, allowing developers

Downloads

15

Readme

toju-react-hooks

toju-react-hooks library is a tool designed to facilitate React application development by providing a series of custom hooks. These hooks are designed to address common problems and frequent usage patterns in application development, allowing developers to manage state, side effects, context, and more, efficiently and with less boilerplate code. The library focuses on improving code readability, component reusability, and performance optimization, ensuring that React applications are more maintainable and scalable.

Key features of toju-react-hooks include:

  • View detection hook: useIsInView allows you to detect when an element is in the viewport, enabling you to perform actions such as lazy loading images or triggering animations only when elements are visible on the screen.
  • Throttling hook: useThrottle helps manage performance by limiting the number of times a function is called over time, which is particularly useful for handling high-frequency events like scrolling or window resizing efficiently.
  • Event handling hook: useEvent simplifies the process of adding and removing event listeners, ensuring that your components respond to user interactions and other events smoothly and without memory leaks. Easy to use: Each hook is designed to be simple and intuitive, making it easy to integrate into any React project. Whether you're building a complex web application or a straightforward React component, toju-react-hooks can help you create more responsive, performant, and maintainable code.

Installation

npm install toju-react-hooks

Hooks List

Function | Description
------------------------------------------|-------------------------------
useCounter(options) | Manage numeric state with increment, decrement, and reset capabilities useEvent(callback) | Memorize and optimize event handlers useIsInView(options) | Determine if a referenced element is within the viewport useThrottle(fn, delay) | Throttle a function execution to limit how often it can be called
useWindowsResize() | Track window resize events and provide the current window dimensions useDebounce(fn, delay) | Debounce a function execution to limit how often it can be called useMediaQuery(query) | Evaluate a media query and return a boolean indicating if it matches useMedia() | Evaluate multiple media queries and return their respective boolean values

HOC List

Function | Description
------------------------------------------------------------------------|------------------------------- withTracking(WrappedComponent, trackEvent, options) | Enhance a component with automatic event tracking capabilities

API

useCounter

Custom hook for managing numeric state with increment, decrement, and reset capabilities.

Parameters

  • options: Object with the following property:
    • initialValue (optional, default = 0): The initial value of the counter.

Returns

UseCounterReturn: An object containing:

  • value (number): The current value of the counter.
  • reset (function): Resets the counter to its initial value.
  • increment (function): Increments the counter by a specified value (default is 1).
  • decrement (function): Decrements the counter by a specified value (default is 1).

Example Usage

const { value, reset, increment, decrement } = useCounter({ initialValue: 10 });

// Increment the counter
increment();

// Decrement the counter
decrement();

// Reset the counter to the initial value
reset();

useEvent

Custom hook to memorize and optimize event handlers.

Parameters

  • callback: Function to be memorized and called by the event handler.

Returns

  • A memorized callback function that can be used as an event handler.

Example Usage

const onClick = useEvent(() => {
  console.log('Clicked');
});

return <button onClick={onClick}>Click me</button>;

useIsInView

Custom hook that determines if a referenced element is within the viewport using the Intersection Observer API.

Parameters

  • options: Object with the following properties:
    • ref (React.RefObject): A React ref attached to the element you want to check for visibility.
    • threshold (number | number[], optional): A single number or an array of numbers indicating at what percentage of the target's visibility the observer's callback should be executed.
    • rootMargin (string, optional): A string representing the margin around the root. Allows the callback to execute even if the target is not in the viewport but within this margin.

Returns

  • isInView (boolean): A boolean value indicating whether the referenced element is in the viewport.

Example Usage

import React, { useRef } from 'react';
import { useIsInView } from 'toju-react-hooks';

const Component = () => {
  const ref = useRef(null);
  const isInView = useIsInView({ ref, threshold: 0.1 });

  return (
    <div ref={ref}>
      {isInView ? 'In view!' : 'Not in view!'}
    </div>
  );
};

useThrottle

Custom hook to throttle a function execution, limiting how often it can be called.

Parameters

  • fn: The function to be throttled.
  • delay: The time (in milliseconds) to wait before the next function call can be executed.

Returns

  • A throttled version of the passed function that respects the specified delay between calls.

Example Usage

import React, { useState } from 'react';
import { useThrottle } from 'toju-react-hooks';

const ThrottledComponent = () => {
  const [count, setCount] = useState(0);
  const throttledIncrement = useThrottle(() => setCount(count + 1), 1000);

  return (
    <div>
      <p>{count}</p>
      <button onClick={throttledIncrement}>Increment</button>
    </div>
  );
};

useWindowsResize

Custom hook to track window resize events and provide the current window dimensions.

Returns

UseWindowsResizeReturn: An object containing:

  • width (number): The current width of the window.
  • height (number): The current height of the window.

Example Usage

import React from 'react';
import { useWindowsResize } from 'toju-react-hooks';

const Component = () => {
  const { width, height } = useWindowsResize();

  return (
    <div>
      <p>Window width: {width}</p>
      <p>Window height: {height}</p>
    </div>
  );
};

useDebounce

Custom hook to debounce a function execution, limiting how often it can be called.

Parameters

  • fn: The function to be throttled.
  • delay: The time (in milliseconds) to wait before the function can be called again.

Returns

  • A debounced version of the passed function that respects the specified delay between calls.

Example Usage

import React, { useState } from 'react';
import { useDebounce } from 'toju-react-hooks';

const DebouncedComponent = () => {
  const [searchTerm, setSearchTerm] = useState('');
  const debouncedSearch = useDebounce((term) => {
    // Perform search with the term
    console.log('Searching for:', term);
  }, 500);

  const handleChange = (event) => {
    setSearchTerm(event.target.value);
    debouncedSearch(event.target.value);
  };

  return (
    <div>
      <input type="text" value={searchTerm} onChange={handleChange} />
    </div>
  );
};

useMediaQuery

Custom hook to evaluate a media query and return a boolean indicating if it matches.

Parameters

  • query: The media query string to be evaluated.

Returns

  • A boolean value indicating whether the media query matches (true) or not (false).

Example Usage

import React from 'react';
import { useMediaQuery } from 'toju-react-hooks';

const ResponsiveComponent = () => {
  const isMobile = useMediaQuery('(max-width: 767px)');

  return (
    <div>
      {isMobile ? (
        <p>Estás en un dispositivo móvil</p>
      ) : (
        <p>Estás en un dispositivo de escritorio</p>
      )}
    </div>
  );
};

useMedia

Custom hook to evaluate multiple media queries and return their respective boolean values.

Parameters

  • None

Returns

An object containing boolean values for each media query:

  • isMobile: Indicates if the viewport matches the mobile media query.
  • isTablet: Indicates if the viewport matches the tablet media query.
  • isDesktop: Indicates if the viewport matches the desktop media query.
  • isBigDesktop: Indicates if the viewport matches the big desktop media query.
  • isLessThanDesktop: Indicates if the viewport matches the less than desktop media query.
  • isMoreThanMobile: Indicates if the viewport matches the more than mobile media query.

Example Usage

import React from 'react';
import { useMedia } from 'toju-react-hooks';

const ResponsiveComponent = () => {
  const {
    isMobile,
    isTablet,
    isDesktop,
    isBigDesktop,
    isLessThanDesktop,
    isMoreThanMobile
  } = useMedia();

  return (
    <div>
      {isMobile && <p>Estás en un dispositivo móvil</p>}
      {isTablet && <p>Estás en un dispositivo tablet</p>}
      {isDesktop && <p>Estás en un dispositivo de escritorio</p>}
      {isBigDesktop && <p>Estás en un dispositivo de escritorio grande</p>}
      {isLessThanDesktop && <p>Estás en un dispositivo menor que un escritorio</p>}
      {isMoreThanMobile && <p>Estás en un dispositivo mayor que un móvil</p>}
    </div>
  );
};

withTracking

Higher-order component (HOC) designed to enhance a component with tracking capabilities. It allows tracking events such as mounting, unmounting, clicking, mouse entering, and being in view.

Parameters

  • WrappedComponent (ComponentType<P>): The component to be enhanced with tracking functionality.
  • trackEvent (TrackEventFunction): Function to execute when tracking an event.
  • options (TrackingOptions): Configuration object for tracking behavior. Includes:
    • trackOnMount (boolean, optional): If true, tracks when the component mounts.
    • trackOnUnmount (boolean, optional): If true, tracks when the component unmounts.
    • trackOnClick (boolean, optional): If true, tracks when the component is clicked.
    • trackOnMouseEnter (boolean, optional): If true, tracks when the mouse enters the component.
    • trackOnInView (boolean, optional): If true, tracks when the component is in view.
    • additionalData (object, optional): Additional data to be sent with the tracking event.

Returns

React.FC<P>: A functional component that wraps the WrappedComponent with added tracking functionality.

Example Usage

import React from 'react';
import { withTracking } from 'toju-react-hooks';
import MyComponent from './MyComponent';

const trackEvent = (eventName, data) => {
  console.log(`Event: ${eventName}`, data);
};

const TrackingOptions = {
  trackOnMount: true,
  trackOnUnmount: true,
  trackOnClick: true,
  trackOnMouseEnter: true,
  trackOnInView: true,
  additionalData: { extraInfo: 'moreData' }
};

const TrackedMyComponent = withTracking(MyComponent, trackEvent, TrackingOptions);

const App = () => (
  <div>
    <TrackedMyComponent />
  </div>
);

Contributions

Contributions are welcome. Please open an issue or pull request to suggest changes or improvements.

This README file provides an overview of the package, installation instructions, usage examples for each feature, instructions for running the tests and an invitation to contribute.