为社区建设略尽绵薄之力!参与 2020 社区问卷调查!

事件池

注意

此文章仅适用于 React 16 及更早版本、React Native。

Web 端的 React 17 不使用事件池。

查看更多关于 React 17 中的相关改动。

SyntheticEvent 对象会被放入池中统一管理。这意味着 SyntheticEvent 对象可以被复用,当所有事件处理函数被调用之后,其所有属性都会被置空。例如,以下代码是无效的:

function handleChange(e) {
  // This won't work because the event object gets reused.
  setTimeout(() => {
    console.log(e.target.value); // Too late!
  }, 100);
}

如果你需要在事件处理函数运行之后获取事件对象的属性,你需要调用 e.persist()

function handleChange(e) {
  // Prevents React from resetting its properties:
  e.persist();

  setTimeout(() => {
    console.log(e.target.value); // Works
  }, 100);
}
Is this page useful?编辑此页面