useAnimationFrame custom hook implemented

This commit is contained in:
NikolaBorislavovHristov 2019-10-02 22:42:11 +03:00
parent 320db99349
commit 7be61e9c9a
2 changed files with 22 additions and 0 deletions

View file

@ -17,6 +17,7 @@ const ShareModal = require('./ShareModal');
const Slider = require('./Slider');
const TextInput = require('./TextInput');
const routesRegexp = require('./routesRegexp');
const useAnimationFrame = require('./useAnimationFrame');
const useBinaryState = require('./useBinaryState');
const useFullscreen = require('./useFullscreen');
const useLiveRef = require('./useLiveRef');
@ -45,6 +46,7 @@ module.exports = {
Slider,
TextInput,
routesRegexp,
useAnimationFrame,
useBinaryState,
useFullscreen,
useLiveRef,

View file

@ -0,0 +1,20 @@
const React = require('react');
const useAnimationFrame = () => {
const animationFrameId = React.useRef(null);
const request = React.useCallback((cb) => {
if (animationFrameId.current === null) {
animationFrameId.current = requestAnimationFrame(() => {
cb();
animationFrameId.current = null;
});
}
}, []);
const cancel = React.useCallback(() => {
cancelAnimationFrame(animationFrameId.current);
animationFrameId.current = null;
}, []);
return [request, cancel];
};
module.exports = useAnimationFrame;