Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

create-effect

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

create-effect

A small utility to create custom hooks using useEffect

  • 0.3.3
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

create-effect

A small utility to create custom hooks with effects without worrying about the current scope.

Install

Through npm npm install create-effect --save

API

const useCustomEffectHook = createEffect(effectDefinition, addDependencies);
  • effectDefinition: A function which matches the definition of the API for which you are creating effect hook for. It should return a function which will be used to cleanup the effect. See example for the useInterval hook

  • addDependencies (Default to true): By default it will figure out dependencies by the arguments you pass on the effectDefinition. If there are no dependencies on the argument, it will use an empty array as dependency causing effect to run only on the first render(mount). With addDependencies as false you can tell the createEffect that this effect has to run after each render.

Creating Effect Hooks

Interval hook (useInterval)

import createEffect from 'create-effect';

const useInterval = createEffect((handler, delay) => {
  const interval = setInterval(handler, delay);

  return () => {
    clearInterval(interval);
  }
});

useInterval example

export default function TestUseInterval() {
  const [delay, setDelay] = useState(1000);

  const [currentTime, updateTime] = useState(new Date().toLocaleTimeString());

  useInterval(() => {
    updateTime(new Date().toLocaleTimeString());
  }, delay);

  return (
    <div>
      {currentTime}{" "}
      <button onClick={() => setDelay(delay + 1000)}>Update Delay</button>
    </div>
  );
}

Timeout hook (useTimeout)

import createEffect from 'create-effect';

const useTimeout = createEffect((handler, delay) => {
  const timeout = setTimeout(handler, delay);

  return () => {
    clearTimeout(timeout);
  }
});

Window event's hook (useWindowEvent)

const useWindowEvent = createEffect((event, handler, captureMode) => {
  window.addEventListener(event, handler, captureMode);

  return () => {
    window.removeEventListener(event, handler, captureMode);
  };
});
useWindowEvent example
function App() {
  const [open, setOpen] = useState(false);

  useWindowEvent("click", handle() => {
    setOpen(!open);
  });

  return (
    <div className="App">
      <h1>Hello World!</h1>
      <h2>{String(open)}</h2>
    </div>
  );
}

Why not just useEffect?

Check this out, https://overreacted.io/making-setinterval-declarative-with-react-hooks/

Like it?

:star: this repo

Keywords

FAQs

Package last updated on 24 Feb 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc