javascript - React.js 节流 mousemove 事件不断抛出 event.persist() 错误

标签 javascript reactjs ecmascript-6 underscore.js

我需要限制 mousemove 事件,我按照下面的提示构建方法,但不起作用: Perform debounce in React.js

这是我的代码(http://jsbin.com/binesofepo/edit?js,console,output):

class Tool extends Component {
  constructor(props) {
    super(props);
    this._onMouseMove = _.throttle(this._onMouseMove.bind(this), 1000)
  }

  render() {    
    return (

      <div ref="tool" className="tool">
        <div ref="toolBody"
             className="tool__body"
             onMouseMove={this._onMouseMove}></div>
      </div>
    )
  }
  _onMouseMove(e) {
    e.persist()
    console.log(e.screenX)
  }
}

如果你一直在tool__body上移动mousemove,它会得到很多下面的警告:

Warning: This synthetic event is reused for performance reasons. If you're seeing this, you're accessing the property screenX on a released/nullified synthetic event. This is set to null. If you must keep the original synthetic event around, use event.persist(). See fb.me/react-event-pooling for more information.

我的 react 版本:“15.0.2”

似乎 e.persist() 效果不佳。任何的想法? :D

最佳答案

e.persist需要和事件同步调用,handler可以异步调用。这是一个修复:

class Tool extends React.Component {
  constructor(props) {
    super(props);
    this._throttledMouseMove = _.throttle(this._throttledMouseMove.bind(this), 2000);
  }

  _throttledMouseMove = (e) => {
    console.log(e.screenX);
  }

  render() {    
    return (
      <div ref="tool" className="tool">
        <div ref="toolBody"
             className="tool__body"
             onMouseMove={this._onMouseMove}>
        </div>
      </div>
    )
  }

  _onMouseMove = (e) => {
    e.persist();
    this._throttledMouseMove(e);

  }
}
ReactDOM.render(<Tool/>, document.querySelector('.main'))

相关更改是直接从事件调用 _onMouseMove,并设置第二种方法来实际处理已被限制的事件。

关于javascript - React.js 节流 mousemove 事件不断抛出 event.persist() 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38142880/

相关文章:

javascript - 给定一组 Promise,我如何强制解决最后一个 Promise 的响应,同时确保所有 Promise 成功解决?

javascript - 无法获取函数内变量的值

java - 使用java for chrome为网络浏览器开发插件

javascript - 无状态函数式组件需要导入 React 吗?

javascript - 导航到无序列表中的上层列表元素

javascript - 有没有办法为浏览器指定最小和最大缩放级别?

javascript - 我无法通过手动输入文字来创建 React 元素

javascript - 用于随机化消息的字符串插值数组

javascript - jquery ajax 请求不返回页面

javascript - 如何使用 Chrome 扩展程序插入 HTML?