react-native-tree-multi-select
Version:
A super-fast, customizable tree view component for React Native with multi-selection, checkboxes, and search filtering capabilities.
40 lines (36 loc) • 1.49 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useDeepCompareEffect;
var _react = _interopRequireDefault(require("react"));
var _fastIsEqual = require("fast-is-equal");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/**
* Deep compare effect hook.
* Ensures the effect runs on the first render and whenever dependencies deeply change.
*
* @param effect The effect callback function.
* @param deps The dependencies array to compare deeply.
*/
function useDeepCompareEffect(effect, deps) {
// Ref to track if it's the first render
const firstRenderRef = _react.default.useRef(true);
// Memoized dependencies to avoid redundant `isEqual` checks
const memoizedDependencies = _react.default.useMemo(() => deps, [deps]);
// Ref to store the previous dependencies
const dependenciesRef = _react.default.useRef(memoizedDependencies);
// Check for dependency changes
const dependenciesChanged = !(0, _fastIsEqual.fastIsEqual)(dependenciesRef.current, memoizedDependencies);
if (dependenciesChanged) {
dependenciesRef.current = memoizedDependencies;
}
_react.default.useEffect(() => {
if (firstRenderRef.current) {
firstRenderRef.current = false;
}
return effect();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [dependenciesChanged]); // exclude the effect function from the dependencies
}
//# sourceMappingURL=useDeepCompareEffect.js.map
;