如何在 React.createRef() 方法上设置初始值?

ms3*_*300 1 javascript reactjs use-ref

我使用作为当前滚动值的 ref 在我的组件中管理滚动。我不能使用 state 和 setState,因为当用户滚动时 setState 方法会让事情变得非常不稳定和不可能。因此,我决定使用不重新渲染组件的引用,而是在组件重新渲染时保存该值。我的问题是我无法为 ref 设置初始值。当我使用类组件时,我不能使用允许轻松设置初始值的简单 useRef 反应钩子......相反,我使用 React.createRef() 但是当我将值放在括号 () 中时,它不会似乎注册它并且在用户滚动之前是未定义的。我该如何解决? 在此处输入图片说明

在这里,当组件更新时(例如,当发送一条新消息时),我想确保只有当用户没有在上方某处浏览旧消息时,它才会向下滚动到最新消息。 在此处输入图片说明

Nic*_*wer 5

要设置由 React.createRef 创建的 ref 的初始值,请执行以下操作:

constructor(props) {
  super(props):

  this.scrollPosition = React.createRef();
  this.scrollPosition.current = 201;
}
Run Code Online (Sandbox Code Playgroud)

不过我确实想提一下,因为你在一个类组件中,你可能不需要引用。在函数组件中,refs 经常以您使用它们的方式使用:拥有一个从渲染到渲染持续存在的可变对象。

但在类组件,你已经一个可变的对象,仍然存在从渲染渲染:this。所以你可以放弃 ref 而只是这样做:

constructor(props) {
  super(props);
  this.scrollPosition = 201;
}

componentDidUpdate(prevProps, prevState) {
  if (This.state.message === "" && this.scrollPosition > 200) {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)