@vnmfify/core
Version:
```shell npm i @vnmfify/core -S ```
78 lines (68 loc) • 3.1 kB
JavaScript
import _isEqual from "lodash/isEqual";
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
import { useForceUpdate } from "@vnmfify/hooks";
import { createRef, useCallback, useEffect, useMemo, useRef } from "react";
export { useToRef } from "@vnmfify/hooks";
export function usePreviousRef(value) {
var previousRef = useRef(value);
useEffect(() => {
previousRef.current = value;
});
return previousRef;
}
export function usePrevious(state) {
return usePreviousRef(state).current;
}
export function useRendered(cb) {
return cb === null || cb === void 0 ? void 0 : cb();
}
export function useRenderedRef(cb) {
var stateRef = useRef();
if (cb) {
stateRef.current = cb();
}
return stateRef;
}
export function useRefs() {
var refs = useRef([]);
var setRefs = useCallback(index => el => {
if (!refs.current[index]) {
refs.current[index] = /*#__PURE__*/createRef();
}
refs.current[index].current = el;
}, []);
var getRef = useCallback(index => refs.current[index], []);
var getRefs = useCallback(() => refs.current, []);
var clearRefs = useCallback(() => refs.current = [], []);
return useMemo(() => ({
refs,
getRef,
getRefs,
setRefs,
clearRefs
}), [clearRefs, getRef, getRefs, setRefs]);
}
export function useObject(state) {
var forceUpdate = useForceUpdate();
var stateRef = useRef(state);
var currentRef = useRef();
var previousRef = useRef();
if (!_isEqual(currentRef.current, state)) {
previousRef.current = currentRef.current;
currentRef.current = state;
stateRef.current = state;
}
var setObject = useCallback(newState => {
stateRef.current = _objectSpread(_objectSpread({}, stateRef.current), newState);
forceUpdate();
}, []);
var getObject = useCallback(() => stateRef.current, []);
return useMemo(() => ({
object: stateRef.current,
getObject,
setObject
}), [stateRef.current, getObject, setObject]);
}
//# sourceMappingURL=state.js.map