"use strict"; exports.__esModule = true; exports.default = void 0; var _react = require("react"); var _useStableMemo = _interopRequireDefault(require("./useStableMemo")); var _useWillUnmount = _interopRequireDefault(require("./useWillUnmount")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * An _immediate_ effect that runs an effect callback when its dependency array * changes. This is helpful for updates should must run during render, most * commonly state derived from props; a more ergonomic version of https://reactjs.org/docs/hooks-faq.html#how-do-i-implement-getderivedstatefromprops * * ```ts * function Example({ value }) { * const [intermediaryValue, setValue] = useState(value); * * useImmediateUpdateEffect(() => { * setValue(value) * }, [value]) * ``` * * @category effects */ function useImmediateUpdateEffect(effect, deps) { var firstRef = (0, _react.useRef)(true); var tearDown = (0, _react.useRef)(); (0, _useWillUnmount.default)(function () { if (tearDown.current) tearDown.current(); }); (0, _useStableMemo.default)(function () { if (firstRef.current) { firstRef.current = false; return; } if (tearDown.current) tearDown.current(); tearDown.current = effect(); }, deps); } var _default = useImmediateUpdateEffect; exports.default = _default;