29 lines
917 B
JavaScript
29 lines
917 B
JavaScript
|
import * as React from 'react';
|
||
|
import canUseDom from "../Dom/canUseDom";
|
||
|
|
||
|
/**
|
||
|
* Wrap `React.useLayoutEffect` which will not throw warning message in test env
|
||
|
*/
|
||
|
var useInternalLayoutEffect = process.env.NODE_ENV !== 'test' && canUseDom() ? React.useLayoutEffect : React.useEffect;
|
||
|
var useLayoutEffect = function useLayoutEffect(callback, deps) {
|
||
|
var firstMountRef = React.useRef(true);
|
||
|
useInternalLayoutEffect(function () {
|
||
|
return callback(firstMountRef.current);
|
||
|
}, deps);
|
||
|
|
||
|
// We tell react that first mount has passed
|
||
|
useInternalLayoutEffect(function () {
|
||
|
firstMountRef.current = false;
|
||
|
return function () {
|
||
|
firstMountRef.current = true;
|
||
|
};
|
||
|
}, []);
|
||
|
};
|
||
|
export var useLayoutUpdateEffect = function useLayoutUpdateEffect(callback, deps) {
|
||
|
useLayoutEffect(function (firstMount) {
|
||
|
if (!firstMount) {
|
||
|
return callback();
|
||
|
}
|
||
|
}, deps);
|
||
|
};
|
||
|
export default useLayoutEffect;
|