javascript - 无法将去抖动分配给类属性

标签 javascript reactjs ecmascript-6 lodash debouncing

我正在使用带有 Stage 2 预设的 Babel,并且有一个像这样的 React 组件类:

class Test extends Component {
  someValue = 'Hello';

  componentDidMount() {
    this.debouncedHandleResize = debounce(this.handleResize, 1000);
    window.addEventListener('resize', this.debouncedHandleResize);
  }

  handleResize = () => {
    console.log(this.someValue);
  }
}

这按预期工作。窗口大小调整后 1000 毫秒,handleResize 方法触发并且控制台记录“Hello”。

为什么我不能执行以下操作?

class Test extends Component {
  someValue = 'Hello';

  debouncedHandleResize = debounce(this.handleResize, 1000);

  componentDidMount() {
    window.addEventListener('resize', this.debouncedHandleResize);
  }

  handleResize = () => {
    console.log(this.someValue);
  }
}

在这种情况下我收到错误:

TypeError: Expected a function

我一定错过了一些东西,但我认为这两种基本上都是为类分配属性值的方法。

最佳答案

既然您更新了代码:问题是 debouncedHandleResizehandleResize 都是公共(public)类字段。由于 debouncedHandleResize 赋值首先出现,因此您尝试在 handleResize 存在之前引用它。

公共(public)类字段按顺序求值,因此

class Test {
  debouncedHandleResize = debounce(this.handleResize, 1000);

  handleResize = () => {
    console.log(this.someValue);
  }
}

相当于

class Test {
  constructor() {
    this.debouncedHandleResize = debounce(this.handleResize, 1000);

    this.handleResize = () => {
      console.log(this.someValue);
    }
}

为什么这不起作用应该是显而易见的。

解决方案

更改作业的顺序:

class Test {
  handleResize = () => {
    console.log(this.someValue);
  }
  debouncedHandleResize = debounce(this.handleResize, 1000);
}

关于javascript - 无法将去抖动分配给类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51089758/

相关文章:

javascript - 流联合类型在递归调用中不起作用

javascript - 使用 TypeScript 在 React 中使用 Promise 对象类型数据创建组件

javascript - 使用 ES6 Proxy 会导致任何函数调用 "is not a function"

reactjs - 用于管理多个 React 组件实例的 Redux 状态形状?

javascript - 从 from input 获取用户输入(数字)

javascript - 如何实现具有属性子集的类?

javascript - 点击多个按钮

javascript - 单击按钮时更新表(SQL/JavaScript/HTML)

javascript - IE 7 条件与 javascript

reactjs - 如何在 AWS 上部署 Django Rest 框架和 React