事件池
注意
此文章仅适用于 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?编辑此页面