useLayoutEffect.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  3. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
  4. Object.defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.useLayoutUpdateEffect = exports.default = void 0;
  8. var React = _interopRequireWildcard(require("react"));
  9. var _canUseDom = _interopRequireDefault(require("../Dom/canUseDom"));
  10. /**
  11. * Wrap `React.useLayoutEffect` which will not throw warning message in test env
  12. */
  13. var useInternalLayoutEffect = process.env.NODE_ENV !== 'test' && (0, _canUseDom.default)() ? React.useLayoutEffect : React.useEffect;
  14. var useLayoutEffect = function useLayoutEffect(callback, deps) {
  15. var firstMountRef = React.useRef(true);
  16. useInternalLayoutEffect(function () {
  17. return callback(firstMountRef.current);
  18. }, deps);
  19. // We tell react that first mount has passed
  20. useInternalLayoutEffect(function () {
  21. firstMountRef.current = false;
  22. return function () {
  23. firstMountRef.current = true;
  24. };
  25. }, []);
  26. };
  27. var useLayoutUpdateEffect = exports.useLayoutUpdateEffect = function useLayoutUpdateEffect(callback, deps) {
  28. useLayoutEffect(function (firstMount) {
  29. if (!firstMount) {
  30. return callback();
  31. }
  32. }, deps);
  33. };
  34. var _default = exports.default = useLayoutEffect;