多个组件点击处理程序的反应性能[每个组件的点击处理程序与点击处理程序]
React performance on multiple component click handlers [single click handler vs click handler for each component]
我有一个呈现子元素列表的组件,为所有项目分配一个单击处理程序并从数据集属性中获取信息与为每个子元素创建一个函数并将数据作为参数传递之间是否存在性能差异?什么更好或更地道?
import React, { Component } from 'react';
export class UserList extends Component {
deleteUser() {
const user = JSON.parse(e.curentTarget.dataset['user']);
// handle deletion
}
render() {
return (
<ul>
{this.props.users.map((u) => (
<li
key={u.id}
data-user={JSON.stringify(u)}
onClick={::this.deleteUser} >
delete {u.name}
</li>
))}
</ul>
);
}
}
与
import React, { Component } from 'react';
export class UserList extends Component {
deleteUser(user) {
// handle deletion
}
render() {
return (
<ul>
{this.props.users.map((u) => (
<li
key={u.id}
data-user={JSON.stringify(u)}
onClick={() => this.deleteUser(u)} >
delete {u.name}
</li>
))}
</ul>
);
}
}
如果您想知道哪一个性能更好,最好的方法是自己运行性能测试。
然而,就编码样式而言,我非常喜欢第二种选择。
请记住,React的核心概念是单向数据流。您向DOM写入。你很少从中读取。(用户输入是规则的例外。)你应该避免向DOM写入和从中读取你可以保存在内存中的内容。在我看来,以这种方式使用数据属性是一种反模式。
事实上,您必须使用JSON序列化对象,这只会使情况变得更糟。JSON解析/字符串化有其自身的成本。此外,作为一般用例,它显然失败了,因为传递给deleteUser
的不是原始对象,而是重建的对象。这对您的用例来说可能很好,但同样也可能是错误的来源。
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在AJAX回调和呈现PIXIJS之间处理程序流时遇到了问题
- Adobe Edge:动画完成时添加onComplete处理程序
- 是否可以从输入处理程序中确定输入的类型
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 平均值.on(事件[,选择器][,数据],处理程序)
- getSript在同一对象上多次添加处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何让React JS点击处理程序在执行时更新DOM
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- Backbone listenTo不将jquery函数作为处理程序进行激发
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数