假设我有一个函数GenerateList()
,它更新状态并将其映射到一个onPoint到一个
<li className="some-classname"}
onClick={this.generateList('product')}> Product </li>
有时我会遇到以下错误:
警告:setState(...):无法在现有状态转换期间更新(例如在
渲染内)。渲染方法应该是道具的纯粹功能...
诸如此类。我在互联网上寻找答案,得到了这样的答案:
<li className="some-classname"}
onClick={this.generateList.bind(this, 'product')}> Product </li>
但我也看到了一个答案(在Github中,但似乎找不到)
<li className="some-classname"}
onClick={() => this.generateList('product')}> Product </li>
主要区别是什么?哪个更合适、更有效?我们为什么要使用这样的
。绑定
和()=
如果你尝试:
<li className="some-classname"}
onClick={this.generateList('product')}> Product </li>
该函数将在每个渲染上执行-这会产生额外的渲染,这就是引发错误的原因。我们想要定义的是一个函数,该函数将在以后触发onClick
时调用。
第二个是定义方法和。bind
将React类this
的上下文绑定到方法。请注意,bind
函数返回一个函数的副本-因此它不调用函数,只定义它供onClick
处理程序使用。
最后一个:
<li className="some-classname"}
onClick={() => this.generateList('product')}> Product </li>
这定义了一个匿名函数,但与第二个实现类似,不调用它。只有当触发onClick
时,才会调用它。但是,在某些情况下,使用匿名函数可能会导致性能问题。该匿名函数将在每次渲染时定义—如果您有一个组件经常重新渲染,则可能会影响应用程序的性能。如果您确信该组件不会经常呈现,那么为了方便起见,匿名函数应该可以。
此外,使用bind时,您可以在组件类构造函数中声明它,如下所示:
constructor(props) {
super(props);
this.state = {
// your state
};
this.generateList = this.generateList.bind(this);
}
问题内容: 我已经开始了一个项目,其中我在前端使用React JS,在后端使用node js。我使用webpack捆绑了JS文件。我将babel与其他必要的东西一起使用。当我在react类中使用箭头函数时,它会给出语法错误,例如: 模块构建失败:SyntaxError:意外令牌 但是我可以在节点中使用Arrow函数,没有任何问题。 这是我的webpack配置文件: 我的React文件: 如何解决这
我有以下Jquery回调函数,我对它有一点怀疑(我不太了解Jquery): 如您所见,该函数只需向后端执行一个AJAX请求,为该请求设置参数。 数据类型呢?什么说?我在HTTP请求中发送的数据类型? 在这种情况下是“text”,因为我发送的是一个文本字符串,它呈现了XML代码?
为什么这在Node.js控制台(在4.1.1和5.3.0中测试)中工作,但在浏览器中不工作(在Chrome中测试)? 这个代码块应该创建并调用一个匿名函数,该函数记录。 另外,当上述操作在节点中工作时。js,这不起作用: 也不是这个: 奇怪的是,当添加参数时,它实际上会在立即调用的部分抛出一个。
本文向大家介绍javascript中call,apply,bind函数用法示例,包括了javascript中call,apply,bind函数用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript中call,apply,bind函数用法。分享给大家供大家参考,具体如下: 一.call函数 a.call(b); 简单的理解:把a对象的方法应用到b对象上(a里如果有thi
这不是重复我的问题,我查了一下,更多的是关于内部匿名类。 我对Lambda表达式很好奇,并测试了以下内容: 如果给定一个数组中有1000个索引,那么对于一个包含1000个索引的循环,删除哪个条目会更快 最初的结果并不令人惊讶,因为我不知道自己会想出什么: 但后来,我决定将常量改为一百万,结果如下: 为了让阅读更简单,以下是结果: 我有以下问题: > 这背后的魔力是什么?当要使用的索引是*100时,
箭头函数: 正规函数 这两个结果应该是相同的,但是看起来像上面定义的arrowFunc考虑第一个arg列表,而normalFunc考虑第二组arg列表。