美文网首页
合成事件中e.persist()方法

合成事件中e.persist()方法

作者: 糖糖不加糖_ | 来源:发表于2023-02-09 14:53 被阅读0次

合成事件

合成事件对象实例为SyntheticEvent,他是浏览器原生事件的跨浏览器包装器,能够兼容所有浏览器,并且包含浏览器原生事件相同的接口。合成事件与浏览器的原生事件不同,也不会直接映射到原生事件

react16及之前版本使用事件池的概念,即SyntheticEvent的事件是放在事件池中进行处理的,也就是每个事件可以被复用,即当事件被调用后,他的属性会被置空,如果需要在事件处理函数执行过后(setTimeout之类的延时),获取属性值,那就要用到event.persist()方法

从 v17 开始,e.persist() 将不再生效,因为 SyntheticEvent 不再放入事件池

e.persist()

如果react事件想要异步访问事件属性(如在setTimeout内),那么在处理事件时调用该方法

  • 不使用persist方法
const Test = () => {
  const [value, setValue] = useState('');

  const onChange = (e: any) => {
    // e.persist();
    setTimeout(() => {
      console.log('---------', e?.target);
      setValue(e?.target?.value);
    }, 1000);
  };

  return <Input onChange={onChange} value={value} />;
};

image.png
  • 使用persist方法
const Test = () => {
  const [value, setValue] = useState('');

  const onChange = (e: any) => {
    e.persist();
    setTimeout(() => {
      console.log('---------', e?.target);
      setValue(e?.target?.value);
    }, 1000);
  };

  return <Input onChange={onChange} value={value} />;
};
image.png
参考文献:

react合成事件:https://zh-hans.reactjs.org/docs/events.html
事件池:https://zh-hans.reactjs.org/docs/legacy-event-pooling.html
·

相关文章

  • 合成事件中e.persist()方法

    合成事件 合成事件对象实例为SyntheticEvent,他是浏览器原生事件的跨浏览器包装器,能够兼容所有浏览器,...

  • React学习之漫谈React

    事件系统 合成事件的绑定方式 Test 合成事件的实现机制:事件委派和自动绑定。 React合成事件系统的委托机制...

  • react事件机制

    (1)react合成事件 react合成事件执行过程: 合成事件与原生事件的区别 1. 写法不同,合适事件是驼峰写...

  • React冒泡处理(3):总结篇

    前言 在上周处理了safari浏览器的冒泡问题后又遇到了新的问题 合成事件与原生事件 在react中,事件分为合成...

  • setState是同步还是异步?

    setState 只在合成事件和钩子函数中是“异步”的,在原生事件和 setTimeout 中都是同步的。 合成事...

  • AE基础(2)-合成

    合成:相当于PR中的序列,用于放置、加工、导出素材的地方新建合成的方法:方法一:将素材箱中的素材拖拽至左下方合成模...

  • react 事件机制

    一、合成事件 react 基于 vitrual dom 实现了 syntheticEvent (合成事件),rea...

  • react的setState是同步还是异步

    直接上结论: 在react的合成事件中是异步在原生事件、setTimeout中是同步。 首先,在react中,平常...

  • React-阻止事件冒泡

    react中分为合成事件、原生事件 合成事件:在jsx中直接绑定的事件,如 原生事件:通过js原生代码绑定的事件,...

  • ios 分类中如何添加数据成员

    分类中可以声明属性,因为声明属性其实就是声明设置方法和获取方法。但是分类中不可以合成属性,因为合成属性其实就是创建...

网友评论

      本文标题:合成事件中e.persist()方法

      本文链接:https://www.haomeiwen.com/subject/oaknxdtx.html