Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

48 строки
1.4 KiB

  1. "use strict";
  2. exports.__esModule = true;
  3. exports.default = void 0;
  4. var _react = require("react");
  5. var _useStableMemo = _interopRequireDefault(require("./useStableMemo"));
  6. var _useWillUnmount = _interopRequireDefault(require("./useWillUnmount"));
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8. /**
  9. * An _immediate_ effect that runs an effect callback when its dependency array
  10. * changes. This is helpful for updates should must run during render, most
  11. * commonly state derived from props; a more ergonomic version of https://reactjs.org/docs/hooks-faq.html#how-do-i-implement-getderivedstatefromprops
  12. *
  13. * ```ts
  14. * function Example({ value }) {
  15. * const [intermediaryValue, setValue] = useState(value);
  16. *
  17. * useImmediateUpdateEffect(() => {
  18. * setValue(value)
  19. * }, [value])
  20. * ```
  21. *
  22. * @category effects
  23. */
  24. function useImmediateUpdateEffect(effect, deps) {
  25. var firstRef = (0, _react.useRef)(true);
  26. var tearDown = (0, _react.useRef)();
  27. (0, _useWillUnmount.default)(function () {
  28. if (tearDown.current) tearDown.current();
  29. });
  30. (0, _useStableMemo.default)(function () {
  31. if (firstRef.current) {
  32. firstRef.current = false;
  33. return;
  34. }
  35. if (tearDown.current) tearDown.current();
  36. tearDown.current = effect();
  37. }, deps);
  38. }
  39. var _default = useImmediateUpdateEffect;
  40. exports.default = _default;