reactjs - 在 React.js 中的 setState 之后自动滚动到呈现的元素

标签 reactjs

假设我在页面顶部的列表项上有一些 setState 声明,如下所示:

<DropdownMenu >
    <DropdownItem className="channel-setting__btn"
      onClick={() => this.setState({ facebookFields: true, youtubeFields: true })}>All</DropdownItem>

    <DropdownItem
      className="channel-setting__btn"
      onClick={() => this.setState({ facebookFields: true, youtubeFields: false })}>Facebook
    </DropdownItem>

    <DropdownItem
      className="channel-setting__btn"
      onClick={() => this.setState({ facebookFields: false, youtubeFields: true })}>Youtube
    </DropdownItem>

</DropdownMenu>

有什么方法可以让我在点击 DropDownItem 时,无论 DOM 元素呈现什么,页面都会自动平滑滚动到该部分或元素呈现在页面上的任何位置,在这种情况下,元素是 facebook 和 youtube 的不同形式,它们将呈现在最后并且太接近页面的末尾。

最佳答案

您可以使用 scrollIntoView componentDidUpdate 之后的功能在 render 之后立即调用.

这是一个使用要滚动到的元素的 ID 的版本。您还可以存储 refs元素并按照推荐的方式进行操作。 (无论如何你都没有修改DOM)

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      media: ''
    }
    this.handleChange = this.handleChange.bind(this);
  }
  handleChange(event) {
    this.setState({
      media: event.target.value
    });
  }
  componentDidUpdate() {
    const element = document.getElementById(this.state.media);
    
    element.scrollIntoView({behavior: 'smooth'});
  }
  render() {
    return (
      <main>
        <select value={this.state.media} onChange={this.handleChange}>
          <option value="facebook">Facebook</option>
          <option value="youtube">Youtube</option>
        </select>
        <p id="facebook" className="social-media">Facebook</p>
        <p id="youtube" className="social-media">Youtube</p>
      </main>
    );
  }
}
ReactDOM.render(<App />, document.getElementById("root"));
.social-media {
  height: 100vh;
}

#facebook {
  margin-top: 100vh;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>


您可能需要检查 scrollIntoView 的浏览器支持并包含 polyfill .

关于reactjs - 在 React.js 中的 setState 之后自动滚动到呈现的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49253988/

相关文章:

javascript - 单击 DIV 时专注于输入

javascript - 如何正确使用后退按钮?

javascript - 如何在 reactjs 中使用单个 ListItem 映射路由?

javascript - 为什么 ReactJS ReactDom.render() 不呈现 HTML 标签?

javascript - 从另一个商店 mobx 调用商店

reactjs - 更改 Office UI Fabric React 组件的颜色

node.js - 在您的 package.json 中为 react 组件添加依赖项以使用react的正确方法是什么

javascript - 如何从我的表单组件重新加载/刷新 react 表组件

javascript - react : Can I check if a state exists before rendering it

reactjs - 如何使用 React.js 在 Botframework v4 聊天应用程序中执行发送“键入指示器”?