UNPKG

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