立即调用箭头函数作为反应道具
Immediately invoked arrow function as a react prop
我注意到我的 React 项目中有一个有趣的问题。我已经按照第一种方法解决了这个问题,但我想知道以下回调方法在作为道具传递时的区别:
1.箭头函数(在render()
内工作正常)
changeImage={ () => this.handleImageUploadModal('OPEN') }
2。函数引用(未捕获的范围错误:超出最大调用堆栈大小)
changeImage={ this.handleImageUploadModal('OPEN') }
首先是一个函数定义,你告诉它给"perform this function on change"。重要的一句话是'definition':你不执行它,你定义它。它没有 'start' 命令:
changeImage={ () => {return this.handleImageUploadModal('OPEN')}() }
// If you want it called instantly, you have to start it: --^^
第二个你应该读作参数。一个更明显的例子:
showImage={ this.shouldImageBeShown() }
将立即调用该函数以确定我们是否应该显示图像,并且 returns true/false -> showImage={true}
.
如果你想在不触发的情况下输入函数名,你可以删除函数的 ()
部分,这样它就不会被调用,只会被声明:
changeImage={ this.openImageUploadModal }
changeImage={ this.handleImageUploadModal('OPEN') }
这意味着 "call handleImageUploadModal immediately, and pass its return value into the changeImage prop"。我猜 handleImageUploadModal 调用了 setState,这意味着组件将重新渲染并重复此过程。
changeImage={ () => this.handleImageUploadModal('OPEN') }
这意味着 "create a function with the text () => this.handleImageUploadModal('OPEN')
and pass it into the changeImage prop"。新创建的函数(还)没有被调用,但是可以在组件认为有必要的时候调用。
我注意到我的 React 项目中有一个有趣的问题。我已经按照第一种方法解决了这个问题,但我想知道以下回调方法在作为道具传递时的区别:
1.箭头函数(在render()
内工作正常)
changeImage={ () => this.handleImageUploadModal('OPEN') }
2。函数引用(未捕获的范围错误:超出最大调用堆栈大小)
changeImage={ this.handleImageUploadModal('OPEN') }
首先是一个函数定义,你告诉它给"perform this function on change"。重要的一句话是'definition':你不执行它,你定义它。它没有 'start' 命令:
changeImage={ () => {return this.handleImageUploadModal('OPEN')}() }
// If you want it called instantly, you have to start it: --^^
第二个你应该读作参数。一个更明显的例子:
showImage={ this.shouldImageBeShown() }
将立即调用该函数以确定我们是否应该显示图像,并且 returns true/false -> showImage={true}
.
如果你想在不触发的情况下输入函数名,你可以删除函数的 ()
部分,这样它就不会被调用,只会被声明:
changeImage={ this.openImageUploadModal }
changeImage={ this.handleImageUploadModal('OPEN') }
这意味着 "call handleImageUploadModal immediately, and pass its return value into the changeImage prop"。我猜 handleImageUploadModal 调用了 setState,这意味着组件将重新渲染并重复此过程。
changeImage={ () => this.handleImageUploadModal('OPEN') }
这意味着 "create a function with the text () => this.handleImageUploadModal('OPEN')
and pass it into the changeImage prop"。新创建的函数(还)没有被调用,但是可以在组件认为有必要的时候调用。