React事件代理
来源:互联网 发布:淘宝三个月前订单不见 编辑:程序博客网 时间:2024/06/08 14:13
review代码的时候 老大看到了这样的代码
list.map((item,index) => { <p onClick={() => this.clickHandler(item.name)} key={index}>{item}</p>})
于是乎提出了问题:这样绑事件,如果list里有100条,会绑100次事件,形成100个函数,性能消耗略大,推荐尝试使用事件代理
然后,想了下,事件代理,如果想传name,好像还需要在代理的容器上取到当前元素再取它的name,然后好像就要在p上再加一个data-xxx来保存这个name,恍惚看到了JQuery的影子
然后,又想到似乎听哪位前辈说过react有对事件做处理,于是这样绑事件,在chrome里试了下
dom结构长这样,点击两个按钮,会分别出现弹层显示对应内容
然后发现,按照原来onclick的绑法,button上的事件不应该是空啊,于是乎把button上的click事件方法remove,像这样:
再去点击button,还是可以显示弹层!
再接再厉,把button上的事件留下,删掉document上的事件,像这样:
果然点击button时没有弹层了!
然后,在网上查了下原理,找到这样一段,
和原生HTML定义事件的唯一区别就是JSX采用驼峰写法来描述事件名称,大括号中仍然是标准的JavaScript表达式,返回一个事件处理函数。在JSX中你不需要关心什么时机去移除事件绑定,因为React会在对应的真实DOM节点移除时就自动解除了事件绑定。
React并不会真正的绑定事件到每一个具体的元素上,而是采用事件代理的模式:在根节点document上为每种事件添加唯一的Listener,然后通过事件的target找到真实的触发元素。这样从触发元素到顶层节点之间的所有节点如果有绑定这个事件,React都会触发对应的事件处理函数。这就是所谓的React模拟事件系统。
附上原文链接http://www.infoq.com/cn/articles/react-jsx-and-component/
终于可以放心大胆的写onClick
了~
以上,有想到再补充,新人 如果文章中有不成熟不正确的想法 敬请拍砖~
- React事件代理
- React事件
- react事件
- 事件代理
- 事件代理
- 事件代理
- 事件代理
- js--事件--事件代理
- js--事件--事件代理
- react 事件系统
- React-事件处理详解
- React-事件处理详解
- React Native中的事件
- react中的事件
- React动态添加事件
- 窥探react事件
- react 事件 (笔记)
- React-native事件处理
- spring 动态 多数据源 数据库 (datasource )配置
- [读书笔记]Android中的TableLayout
- iOS 报错:没有查看权限the file "xxx.app" couldn't be opened because you don't have permission to view it.
- Android6.0 AMS启动Activity(四) AMS内部一些成员变量
- MySQL数据库主从(Master/Slave)同步安装与配置
- React事件代理
- Aggressive cows(二分查找最大化最小值)
- 日常整理
- 为什么需要使用并发编程?什么时候适合使用并发编程技术?
- 如何优化内存?Unity中的内存种类;冯乐乐的总结的优化技术。
- Android异步处理常用方法
- android 微信6.2.0 AndroidManifest.xml
- 限时抢购秒杀系统架构分析与实战
- yii2批量插入数据