【发布时间】:2023-04-02 00:37:02
【问题描述】:
我计划在一个项目中使用 useRef.current.values,并且我正在阅读一份指南,推荐从 useEffect 内部返回值。该指南显示了设置,但没有使用值的示例。
我不知道如何从 useEffect 中获取 useRef 值。我通过 console.log 看到 pageRef.current 对象中的值,这些值在页面渲染后填充。当我尝试返回值时,useEffect 抱怨 - 错误消息说你只能返回一个函数。
这是我正在使用的 Nav 组件(Nav 是 App 入口点,页面在底部以 PageContainer 呈现,hookrouter 样式):
const Nav = () => {
const pageRef = useRef({});
const [isOpen, setIsOpen] = useState(true);
const routeResult = useRoutes(directions);
useEffect(() => {
if (pageRef.current) {
let pageHeight = pageRef.current.currentHeight;
let pageWidth = pageRef.current.currentWidth; // etc.
console.log(pageRef.current.currentWidth); // example
return pageWidth; // error, can only return a function
}
}, [pageRef]);
console.log(pageRef.current.clientWidth);
const backgroundClickHandler = () => {
if (isOpen) {
setIsOpen(!isOpen);
}
};
const toggleClickHandler = () => setIsOpen(!isOpen);
return (
<div>
<ToggleContainer>
<button
className='fas fa-bars fa-2x'
onClick={toggleClickHandler}
></button>
</ToggleContainer>
{isOpen && <NavWrapper>{NavList()}</NavWrapper>}
<ClickContainer onClick={backgroundClickHandler} isOpen={isOpen}>
<PageContainer ref={pageRef}>
{routeResult || <NotFoundPage />}
</PageContainer>
</ClickContainer>
</div>
);
};
export default Nav;
所以我的问题是:
-
为什么从 useEffect 内部检索 useRef 值,而不是 直接访问
pageRef.current.value?它不是从返回信息吗 DOM,不直接更新 DOM?返回current.value有副作用吗? -
pageRef 的 useEffect 中的值不会在以下情况下更新 调整窗口大小,即使 pageRef 在数组中 useEffect 应该监视 (?)。
-
什么是返回
pageRef.current.value的函数示例 在这种情况下? -
有没有更好的方法来完成我想要完成的事情 在这里?
【问题讨论】:
-
你想在这里完成什么?
-
我正在尝试从 PageContainer 中获取呈现的页面高度,以及视口宽度。我为宽度采用了不同的解决方案,但我仍然很好奇如何从这种情况下获取值。我应该使用 createRef 而不是 useRef 吗?
-
useRef与createRef相同,只是useRef是一个react hook,可以在函数组件中使用,createRef在基于类的组件中。
标签: javascript reactjs window use-effect use-ref