33 lines
1.0 KiB
JavaScript
33 lines
1.0 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var react_1 = require("react");
|
|
|
|
var useTrackedEffect = function useTrackedEffect(effect, deps) {
|
|
var previousDepsRef = react_1.useRef();
|
|
|
|
var diffTwoDeps = function diffTwoDeps(deps1, deps2) {
|
|
//Let's do a reference equality check on 2 dependency list.
|
|
//If deps1 is defined, we iterate over deps1 and do comparison on each element with equivalent element from deps2
|
|
//As this func is used only in this hook, we assume 2 deps always have same length.
|
|
return deps1 ? deps1.map(function (_ele, idx) {
|
|
return deps1[idx] !== deps2[idx] ? idx : -1;
|
|
}).filter(function (ele) {
|
|
return ele >= 0;
|
|
}) : deps2 ? deps2.map(function (_ele, idx) {
|
|
return idx;
|
|
}) : [];
|
|
};
|
|
|
|
react_1.useEffect(function () {
|
|
var changes = diffTwoDeps(previousDepsRef.current, deps);
|
|
var previousDeps = previousDepsRef.current;
|
|
previousDepsRef.current = deps;
|
|
return effect(changes, previousDeps, deps);
|
|
}, deps);
|
|
};
|
|
|
|
exports["default"] = useTrackedEffect; |