reactjs - onScroll react 只适用于窗口?

标签 reactjs

我正在用 React 制作一个个人网站,我想在滚动方面做一些技巧,但你知道它是怎么回事,卡在了第一步。我的 react 是

  class App extends Component {
  makeTextLarger(e) {
    console.log(e)
    console.log("scrolling")
  }
  componentDidMount() {
      const list = ReactDOM.findDOMNode(this.refs.test)
      console.log(list)

      list.addEventListener('scroll', this.makeTextLarger);
  }
  componentWillUnmount() {
      const list = ReactDOM.findDOMNode(this.refs.test)
      list.removeEventListener('scroll', this.makeTextLarger);
  }
  render() {
    var style = {
      height: '10000px',
      fontSize: 200,
      background: 'blue'
    };
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title"</h1>
        </header>
        <p className="App-intro">
          text to be made bigger at some point
        </p>
        <div ref="test" style={style}>
          Pls
        </div>
      </div>
    );
  }
}

当我滚动时,其中没有任何东西触发。如果我改为查看使用窗口而不是特定的 div,它就可以工作。当我 console.log 列表时,它确实返回了一个 html 对象,所以我不确定为什么我的绑定(bind)有选择地工作。有什么想法吗?

最佳答案

您可以向读取“滚动”事件的组件添加一个事件监听器。

例如,这里重写了您的组件。仅更改了方法,未添加任何引用:

class App extends Component {
  constructor() {
    super()
    this.state = {
      count: 0
    }
  }
  componentDidMount() {
    window.addEventListener('scroll', this.handleScroll)
  }

  componentWillUnmount() {
    window.removeEventListener('scroll', this.handleScroll)
  }
  handleScroll = () => {
    this.setState(
      { count: this.state.count + 1 },
      console.log('Scroll', this.state.count)
    )
  }
  render() {
    var style = {
      height: '10000px',
      fontSize: 200,
      background: 'blue'
    }
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title" />
        </header>
        <p className="App-intro">text to be made bigger at some point</p>
        <div ref="test" style={style}>
          Pls
        </div>
      </div>
    )
  }
}

你会得到稳定的 console.logs 流到你的浏览器。它应该接近准确,但并不完美,因为 this.setState 是异步的。

您还可以使用 handleScroll = (e) => {

传入事件本身

供引用:Update style of a component onScroll in React.js

关于reactjs - onScroll react 只适用于窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47426348/

相关文章:

reactjs - 禁用 admin-on-rest SimpleForm 的自动完成

javascript - 将输入的动态值作为标签的单选按钮

reactjs - 如何在 React 中阻止 UI

javascript - SpyOn 一个 mock 的 Jest 模块没有正确监视

javascript - 如何在React渲染中使用异步JavaScript

arrays - 使用来自 firebase 集合的键值对填充 react 选择选项数组

javascript - 使用 npm 包导出我自己的流类型?

javascript - ES6 类 getter、临时返回或替代解决方案

reactjs - 如何使用 Material-ui 在工具栏内拥有全高选项卡?

javascript - JavaScript 中的 <T> 是做什么用的?