【发布时间】:2021-10-03 03:31:02
【问题描述】:
我试图在安装后获取元素高度。 它们的高度可以根据子元素改变,这就是为什么我不能给出静态高度。
const PositionedComponent = styled.div`
position: fixed;
z-index: 999999999;
max-height: 300px;
overflow:unset;
${props =>
!props.hasOverflow && `
overflow: hidden;
overflow-y: auto;
`}
`;
....
const [elementHeight,setElementHeight] = useState(0);
const portalRef = useRef(null);
const childrenContainerRef = useRef(null);
useEffect(()=>{
if(portalRef.current){
const portalDimensions = portalRef.current.getBoundingClientRect();
setElementHeight(portalDimensions.height);
}
}, [portalRef]);
....
return (
isVisible && (
<Root>
{ReactDOM.createPortal(
<PositionedComponent
ref={portalRef}
style={combinedStyles}
hasOverflow={hasOverflow}
id='positioned-component'
>
<ChildrenContainer ref={childrenContainerRef}>
{children}
</ChildrenContainer>
</PositionedComponent>,
document.getElementById(portalContainerName)
)}
</Root>
)
);
它没有再次进入useEffect。即使它再次进入 useEffect,我也不确定我能否获得正确的高度。 任何想法 ? 谢谢
【问题讨论】:
-
如果我是对的,你想在安装元素时获取高度,然后更新是否会改变高度?
-
@ЖнецЪ 是的,没错
标签: reactjs react-hooks use-effect use-ref