- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想知道,在 React.js 中,在组件中声明匿名函数、命名函数或方法之间是否存在性能差异。
具体来说,以下一项是否比其他项更高效?
class MyComponent extends React.Component {
render() {
return (
<input
type="text"
value={foo}
onChange={(e) => {
this.setState({ foo: e.target.value });
}}
/>
);
}
}
class MyComponent extends React.Component {
...
render() {
function handleChange(e) {
this.setState({ foo: e.target.value });
}
return (
<input
type="text"
value={foo}
onChange={handleChange}
/>
);
}
}
class MyComponent extends React.Component {
...
handleChange(e) {
this.setState({ foo: e.target.value });
}
render() {
return (
<input
type="text"
value={foo}
onChange={this.handleChange}
/>
);
}
}
最佳答案
是的,肯定有,您的代码的第三个版本是在 React 组件的渲染 block 中引用函数的正确方法。
为什么?
通常,嵌套函数被认为是将被调用不止一次或两次的方法的反模式;这主要是由于 JavaScript 引擎将函数视为任何其他值,并且必须创建并随后在父调用完成后销毁它。
如果您需要能够从 handleChange()
中访问 this
,您需要将该方法绑定(bind)到组件的上下文。以下是不会对性能产生任何负面影响的方法。
Vanilla ES6 通过构造函数:
class MyComponent extends React.Component {
constructor(props) {
super(props)
this.handleChange = this.handleChange.bind(this)
}
handleChange(e) {
this.setState({ foo: e.target.value });
}
render() {
return (
<input
type="text"
value={foo}
onChange={this.handleChange}
/>
)
}
}
类属性中的箭头函数(需要带有 transform-class-properties 的 babel):
class MyComponent extends React.Component {
handleChange = (e) => {
this.setState({ foo: e.target.value });
}
render() {
return (
<input
type="text"
value={foo}
onChange={this.handleChange}
/>
)
}
}
装饰类方法(需要带有 transform-decorators-legacy 和 core-decorators 的 babel):
import { autobind } from 'core-decorators'
class MyComponent extends React.Component {
@autobind
handleChange(e) {
this.setState({ foo: e.target.value });
}
render() {
return (
<input
type="text"
value={foo}
onChange={this.handleChange}
/>
)
}
}
希望这对您有所帮助!
关于javascript - react 性能 : anonymous function vs named function vs method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42571091/
const example = () => new Promise((resolve) => { resolve(); console.log('1'); } ) example().
我正在尝试制作一个天气应用程序,并且我正在使用天气 API 来获取信息,但是当我尝试解析 JSON 数据时出现此错误: SyntaxError: Unexpected end of JSON inpu
我尝试编写一个函数来更改文本的颜色,但出现错误。我想知道如何解决这个问题。 function change() { var colour = prompt("What's your favourite
所以我对我正在处理的这段代码有疑问。我一直在使用在下面的链接中找到的聊天功能。当我将它集成到我的应用程序中使用时,它工作得很好,尽管我在修改它时遇到了麻烦。然而,为了为我的网站创建用户历史记录功能,我
我在 JSON.parse() 中出错,我有 .php 文件,其中包含从数据库检索数据的方法和 .js 文件,用于自动完成功能,我的 .php 文件以字符串形式返回数据,我需要将其转换为使用 JSON
在java中这是有效的 new Thread(new Runnable() { public void run() { for(in
该网站如何设法将引荐来源网址清空。所有其他引用者消隐服务似乎只是隐藏引用者。然而,这成功地让谷歌分析相信用户在网站中输入了内容。 我似乎无法弄清楚他们是如何做到的。 例如:http://www.ano
我正在查看这行代码 options?: { name?: string, async?: boolean }。 { name?: string, async?: boolean } 类型的正确术语是什
以下是 Javascript 考试的练习题和答案。 我很困惑,因为我最初的 react 是选择 B。我知道 D 也是正确的,但是当我参加定时考试时,如果我发现我认为是正确的答案,有时我会停止阅读其余的
当我遍历dom ..时,我在浏览器控制台日志中收到一条错误消息null at HTMLDivElement.。HTMLDivElement. 是什么意思? 浏览器 Google Chrome浏览器 图
这个问题已经有答案了: When should I use arrow functions in ECMAScript 6? (9 个回答) 已关闭 6 年前。 我已经看到了这两种类型的代码,我想知道
我创建了一项 WCF 服务并将其部署在服务器上。当我浏览此服务时,它会通过 ?wsdl URL 给出积极响应。现在我正在尝试通过 WCF 测试客户端测试该服务。它显示了正确的元数据。但是当我尝试从服务
如何阻止匿名用户在 gerrit 中查看我的项目事件。我已经用谷歌搜索了足够多的内容,但找不到所谓的项目访问控制列表的确切文件。 最佳答案 如果你想禁止匿名用户浏览/读取/搜索某个项目的所有变更,只需
就在今天,我需要一种在不同对象之间传递函数的方法。我很快了解到,你不能直接在 Java 中执行此操作,但你可以传递一个显然称为“匿名内部类”的实例,如下所示: 定义类: interface MyCal
留言簿的PHP代码如下: prepare('INSERT INTO comments(`author`, `comment`) VALUES(:author, :comment)'); $st
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
是否可以在不知道其类名的情况下将数据表转换为 ienumerable。 我的要求是转换表格 First | Last -------------- john | mcgill clara | lin
如何使用 Anonym 函数删除事件监听器,使用 removeEventListener(); document.getElementById("object").onclick = function
我在我的 Node 服务器上运行以下 psql: SELECT json_data.key AS id, json_data.value::int AS version FROM players.se
我想使用完整日历让用户创建工作日(周一至周日,如果可能的话,还有节假日)的开放时间。 fullcalendar 已经做了什么,但它不是针对特定的一周,所以它不应该有日期。那么问题来了: 有什么想法可以
我是一名优秀的程序员,十分优秀!