我计划在一个项目中使用 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
在这种情况下返回 a 的函数的示例是什么?有没有更好的方法来完成我在这里想要完成的事情?