反应模态滚动到顶部

React modal scroll to top

我的 React 应用程序中有一个长格式的模态框。因此,当我提交表单时,我会在表单顶部显示来自服务器的验证消息。所以用户必须滚动到顶部才能查看消息。所以我想在消息出现时自动滚动到顶部。所以我在提交处理函数中添加了以下代码。但它不起作用。

setAddModalErrorMsg([{ msg: res.data.msg, type: "error" }])
                    window.scrollTo({
                        top: 0,
                        left: 0,
                        behavior: "smooth"
                      });

您正在尝试滚动 window,但您的 window 可能已经在顶部,需要向上滚动的是您的模态元素。

为此,我将创建一个对模态元素的引用,然后在您的函数中通过引用滚动模态元素,所以类似于:

import React, {useRef} from 'react';

const Modal = (props) => {
  // use the useRef hook to store a reference to the element
  const modalRef = useRef();
  
  const setAddModalErrorMsg = () => {
    // check the ref exists (it should always exist, it's declared in the JSX below), and call a regular javascript scrollTo function on it
    modalRef.current?.scrollTo({x: 0, y: 0, animated: false});
  }
  
  // see here we create a reference to the div that needs scrolled
  return (
    <div ref={modalRef}>
     { // your modal content }
    </div>
  )

}

要自动滚动到顶部,我们可以使用以下代码:

  constructor(props) {
    super(props)
    this.myRef = React.createRef()   // Create a ref object 
    }

在setAddModalErrorMsg后添加scrollTo函数

 setAddModalErrorMsg([{ msg: res.data.msg, type: "error" }])
    this.myRef.current.scrollTo(0, 0);

 <div ref={this.myRef}></div> 

将 ref 属性 附加到顶部 dom 元素

其他答案显示了如何将模式滚动到顶部,这是实现此目的的普遍接受的方法,不过,我想向您展示如何将“消息”滚动到视图中,无论是否上不上。

您还需要创建一个 ref 到您显示消息的位置,并使用 scrollIntoView 功能将模式滚动到您的验证消息。

import React, { useRef } from 'react';

const Modal = () => {
  const validationMessageRef = useRef();

  const setAddModalErrorMsg = () => {
    // scrolls the validation message into view, and the block: 'nearest' ensures it scrolls the modal and not the window
    validationMessageRef.current?.scrollIntoView({ block:'nearest' });
  }

  return (
    <div>
      <div ref={validationMessageRef}>
        // your validation message is displayed here
      </div>

      // rest of your modal content here
    </div>

  )
}