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