立即调用箭头函数作为反应道具
2019-10-28
706
我注意到我的 React 项目中有一个有趣的问题。我已经按照第一种方法解决了这个问题,但我想知道在作为 prop 传递时以下回调方法之间的区别:
1. 箭头函数
(在
render()
内运行良好)
changeImage={ () => this.handleImageUploadModal('OPEN') }
2. 函数引用 (未捕获的 RangeError:超出最大调用堆栈大小)
changeImage={ this.handleImageUploadModal('OPEN') }
2个回答
第一个是函数定义,您告诉它“在更改时执行此函数”。 重要的词是“定义”:您不执行它,而是定义它。 它没有“启动”命令:
changeImage={ () => {return this.handleImageUploadModal('OPEN')}() }
// If you want it called instantly, you have to start it: --^^
您应该将第二个读作参数。 一个更明显的例子:
showImage={ this.shouldImageBeShown() }
该函数将立即被调用以确定我们是否应该显示图像,并返回 true/false ->
showImage={true
。
如果您想输入函数名称而不触发它,您可以删除函数的
()
部分,这样它就不会被调用,只声明:
changeImage={ this.openImageUploadModal }
Martijn
2019-10-28
changeImage={ this.handleImageUploadModal('OPEN')
这意味着“立即调用 handleImageUploadModal,并将其返回值传递到 changeImage 属性中”。我猜 handleImageUploadModal 调用了 setState,这意味着组件将重新渲染,并重复此过程。
changeImage={ () => this.handleImageUploadModal('OPEN')
这意味着“创建一个带有文本
() => this.handleImageUploadModal('OPEN')
的函数,并将其传递到 changeImage 属性中”。新创建的函数尚未被调用(目前),但可以在组件认为必要时随时调用。
Nicholas Tower
2019-10-28