ahooks
Version:
react hooks library
47 lines (46 loc) • 1.74 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _resizeObserverPolyfill = _interopRequireDefault(require("resize-observer-polyfill"));
var _useRafState3 = _interopRequireDefault(require("../useRafState"));
var _domTarget = require("../utils/domTarget");
var _useIsomorphicLayoutEffectWithTarget = _interopRequireDefault(require("../utils/useIsomorphicLayoutEffectWithTarget"));
function useSize(target) {
var _useRafState = (0, _useRafState3["default"])(function () {
var el = (0, _domTarget.getTargetElement)(target);
return el ? {
width: el.clientWidth,
height: el.clientHeight
} : undefined;
}),
_useRafState2 = (0, _slicedToArray2["default"])(_useRafState, 2),
state = _useRafState2[0],
setState = _useRafState2[1];
(0, _useIsomorphicLayoutEffectWithTarget["default"])(function () {
var el = (0, _domTarget.getTargetElement)(target);
if (!el) {
return;
}
var resizeObserver = new _resizeObserverPolyfill["default"](function (entries) {
entries.forEach(function (entry) {
var _entry$target = entry.target,
clientWidth = _entry$target.clientWidth,
clientHeight = _entry$target.clientHeight;
setState({
width: clientWidth,
height: clientHeight
});
});
});
resizeObserver.observe(el);
return function () {
resizeObserver.disconnect();
};
}, [], target);
return state;
}
var _default = exports["default"] = useSize;