@darwish/hooks-core
Version:
26 lines (25 loc) • 847 B
JavaScript
import { useCallback, useState, useRef } from 'react';
import useUnmount from './useUnmount';
/**
* @description 用 requestAnimationFrame 来更新 state
* @param initialState initial state
* @returns [state, setState]
* @example
* const [state, setState] = useRafState(0);
* const [state, setState] = useRafState(() => 0);
*/
var useRafState = function (initialState) {
var frame = useRef(0);
var _a = useState(initialState), state = _a[0], setState = _a[1];
var setRafState = useCallback(function (value) {
cancelAnimationFrame(frame.current);
frame.current = window.requestAnimationFrame(function () {
setState(value);
});
}, []);
useUnmount(function () {
window.cancelAnimationFrame(frame.current);
});
return [state, setRafState];
};
export default useRafState;