Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@rooks/use-raf

imbhargav51.7kMIT4.11.2TypeScript support: included

A continuously running requestAnimationFrame hook for React

use, requestAnimationFrame, react-hooks.org, react, rooks, hooks, raf

readme

@rooks/use-raf

Note: Future updates to this package have moved to the main package rooks. All hooks now reside in a single package which you can install using

npm install rooks

or

yarn add rooks

Rooks is completely treeshakeable and if you use only 1 of the 50+ hooks in the package, only that hook will be bundled with your code. Your bundle will only contain the hooks that you need. Cheers!

TitleCard

Build Status

About

A continuously running requestAnimationFrame hook for React

Image from Gyazo

Installation

npm install --save @rooks/use-raf

Importing the hook

import useRaf from "@rooks/use-raf";

Usage

let angle = 0;
function updateAngle() {
  angle = (angle + 3) % 360;
  return (angle * Math.PI) / 180;
}

function Demo() {
  const { value: shouldRun, toggleValue: toggleShouldRun } = useToggle(true);
  const myRef = useRef();
  const canvasRef = useRef();
  useRaf(() => {
    if (canvasRef && canvasRef.current) {
      const screenRatio = window.devicePixelRatio || 1;
      let angle = updateAngle();
      const canvas = canvasRef.current;
      var ctx = canvas.getContext("2d");
      ctx.save();
      ctx.clearRect(0, 0, canvasRef.current.width, canvasRef.current.height);
      ctx.scale(screenRatio, screenRatio);
      ctx.fillStyle = "midnightblue";
      ctx.globalAlpha = 1;
      ctx.fillRect(0, 0, canvasRef.current.width, canvasRef.current.height);
      ctx.fillStyle = "yellow";
      ctx.lineWidth = 2;
      ctx.translate(50, 50);
      ctx.rotate(angle);
      ctx.fillRect(-20, -20, 40, 40);
      ctx.restore();
    }
  }, shouldRun);

  return (
    <>
      <h2>
        Request animation frame is now {shouldRun ? "" : "in"}active. Click to
        toggle.
      </h2>
      <p>
        <button onClick={toggleShouldRun}>Toggle Raf</button>{" "}
      </p>
      <canvas
        ref={canvasRef}
        style={{ height: `100px`, width: `100%`, background: "grey" }}
      />
    </>
  );
}

render(<Demo />);

changelog

v3.6.0-canary.0 (2019-12-25)

:rocket: New Feature

  • fullscreen, storybook

:house: Internal

  • boundingclientrect-ref, countdown, docusaurus, fork-ref, geolocation, intersection-observer-ref, isomorphic-effect, mutation-observer-ref, outside-click-ref
  • Other

:memo: Documentation

v3.5.1 (2019-12-18)

:memo: Documentation

:house: Internal

3.4.3

  • Added new useCountdown hook

3.4.2

  • Fix types for useOutsideClickRef hook
  • Internal bug fixes

v3.4.0

  • New useBoundingclientrectRef hook
  • New useForkRef hook
  • New useOutsideClickRef hook
  • New useIsomorphicEffect hook
  • New useMutationObserverRef hook
  • New useIntersectionObserverRef hook
  • Minor bug fixes

v3.3.0

  • New useGeolocation hook
  • New useThrottle hook
  • Minor bug fixes

v3.2.2

  • Fix a minor bug in useKeys

v3.2.0

  • New hooks added

    • useOnWindowResize
    • useOnWindowScroll
    • useKeys
  • Allow localStorage and sessionStorage to store all kinds of values.

v3.1

  • New hook added useDebounce

v3

  • Critical bug with useKey with refs not detected was fixed
  • useWindowSize now returns innerHeight, innerWidth, outerHeight and outerWidth. It no longer returns height and width which were ambiguous.
  • useWorker has a new signature.
  • useInterval had issues with useState which have been resolved
  • usePrevious has a much simpler implementation using useRef
  • typescript types have been added to all the hooks
  • Storybook website has been added
  • Uniform major package version for all packages. It makes development easier and it also helps tracking compatibility.

v2

  • useToggle v2.0.0 Return value is now an array with two values instead of an object

Older

  • useInterval

    -1.1.1 (2019-01-20)

  • useOutsideClick

    • Fix SSR bug introduced
    • Also look for touch listeners now
  • rooks