antd
Version:
An enterprise-class UI design language and React components implementation
30 lines • 1.01 kB
JavaScript
import React from 'react';
import { isNumber } from '../../_util/is';
import { isSameBorderWidth } from '../util';
const DEFAULT_BORDER_WIDTH = [0, 0, 0, 0];
const normalizeValue = val => {
const size = Number.parseFloat(val);
return isNumber(size) ? size : 0;
};
const useBorderSize = domNode => {
const [borderWidth, setBorderWidth] = React.useState(DEFAULT_BORDER_WIDTH);
const setIfChanged = next => {
setBorderWidth(prev => isSameBorderWidth(prev, next) ? prev : next);
};
React.useEffect(() => {
if (!domNode) {
setIfChanged(DEFAULT_BORDER_WIDTH);
return;
}
const {
borderTopWidth,
borderRightWidth,
borderBottomWidth,
borderLeftWidth
} = getComputedStyle(domNode);
const nextBorderWidth = [normalizeValue(borderTopWidth), normalizeValue(borderRightWidth), normalizeValue(borderBottomWidth), normalizeValue(borderLeftWidth)];
setIfChanged(nextBorderWidth);
}, [domNode]);
return borderWidth;
};
export default useBorderSize;