mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-23 00:45:16 +00:00
48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
"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; |