38 lines
1.4 KiB
JavaScript
38 lines
1.4 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
||
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.useLayoutUpdateEffect = exports.default = void 0;
|
||
|
var React = _interopRequireWildcard(require("react"));
|
||
|
var _canUseDom = _interopRequireDefault(require("../Dom/canUseDom"));
|
||
|
/**
|
||
|
* Wrap `React.useLayoutEffect` which will not throw warning message in test env
|
||
|
*/
|
||
|
var useInternalLayoutEffect = process.env.NODE_ENV !== 'test' && (0, _canUseDom.default)() ? 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;
|
||
|
};
|
||
|
}, []);
|
||
|
};
|
||
|
var useLayoutUpdateEffect = function useLayoutUpdateEffect(callback, deps) {
|
||
|
useLayoutEffect(function (firstMount) {
|
||
|
if (!firstMount) {
|
||
|
return callback();
|
||
|
}
|
||
|
}, deps);
|
||
|
};
|
||
|
exports.useLayoutUpdateEffect = useLayoutUpdateEffect;
|
||
|
var _default = useLayoutEffect;
|
||
|
exports.default = _default;
|