【发布时间】:2020-09-11 00:42:25
【问题描述】:
所以,我正在尝试为我的组件实现 react forwardref 示例,因为我想控制内部的滚动条。
这是我所拥有的:
const MessagesFC = React.forwardRef((props, ref) => {
return <Flex
className={"Messages"}
direction={"Column"}
ref={ref}>
{messages}
</Flex>
});
const scrollDivRef = React.createRef<any>();
React.useEffect(() => {
scrollDivRef.current?.scrollIntoView({ behavior: "smooth"})
}, [ scrollDivRef, chatRoom.messages ])
在我的 return() 中,组件是这样添加的:
<MessagesFC
ref={scrollDivRef}/>
似乎和示例中一样设置。
但是,在执行此代码时,scrollDivRef.current 始终未定义。
那么,我哪里做错了?
我的代码截图:
【问题讨论】:
-
useEffect在哪里使用?
-
@ShubhamKhatri useEffect 是 React API 的一部分。
-
显然我知道,在您的帖子中 useEffect 是独立于 MessagesFC 编写的。这就是造成混乱的原因,因为钩子不能在功能组件之外使用
-
@ShubhamKhatri 不是我的帖子,而且你知道它并不明显,因为你在问它在哪里定义并且答案在 React API 中。无论如何,我认为 scrollDivRef.current 是未定义的,因为引用只存在于 forwardRef 回调中。
-
这在很大程度上取决于您使用定义 MessagesFC 功能组件的方式和位置。请添加更多提供此信息的代码
标签: reactjs react-hooks ref