[英]when to use function() , function or () => function(callback)
我一直在寻找一个很好的解释,所以这一切都清楚了。 例:
<Char click={()=>this.onDeleteHandler(index)}/>
VS
<Char click={this.onDeleteHandler()}/>
VS
<Person changed={(event) => this.nameChangedhandler(event, person.id)} />
和
<Char click={this.onDeleteHandler}/>
关于第三个代码,这里是名为:
nameChangedhandler = (event, id) => {
const personIndex = this.state.persons.findIndex(p => {
return p.id === id;
});
// copying the person with the right index
const person = {
...this.state.persons[personIndex]
};
// Assigning new name to this person
person.name = event.target.value;
// copying array of persons, then manipulating the correct object of person by using the index
const persons = [...this.state.persons];
persons[personIndex]= person;
this.setState({
persons: persons
});
}
有些方面对我来说很清楚,但绝对不是100%! 所以,如果你能给我一个解释,链接或类似的东西,那将是伟大的!
谢谢!
<Char click={()=>this.onDeleteHandler(index)}/>
它将匿名函数作为回调传递 - 当单击时 - 触发带有额外index
参数的onDeleteHandler
(必须在之前的范围中定义)。
<Char click={this.onDeleteHandler()}/>
它传递onDeleteHandler()
结果作为回调 - 可能是一个坏主意 - onDeleteHandler
函数必须返回另一个将在点击时调用的函数。
<Person click={changed={(event) => this.nameChangedhandler(event, person.id)} />
看起来无效 - 会导致语法错误。
<Char click={this.onDeleteHandler}/>
与第一个示例类似,但不采用自定义参数。 默认点击事件将作为onDeleteHandler
的第一个参数onDeleteHandler
通常,当您需要将处理程序绑定到上下文或提供自定义参数时,您将使用内联箭头函数
在
<Char click={()=>this.onDeleteHandler(index)}/>
onDeleteHandler
绑定到呈现Char
的上下文,并传递自定义参数index
。 由于返回一个新函数进行click
,它可以在Char
执行,如this.props.click()
<Char click={this.onDeleteHandler()}/>
这里评估onDeleteHandler
并将值返回给click
prop
<Person click={changed={(event) => this.nameChangedhandler(event, person.id)} />
这里语法无效,应该是
<Person changed={(event) => this.nameChangedhandler(event, person.id)} />
在这种情况下,它采用默认参数并将其与自定义参数一起传递给nameChangedHandler
,它还执行绑定
<Char click={this.onDeleteHandler}/>
刚刚分配的参考onDeleteHandler
到click
,只要你调用click
, onDeleteHandler
将与您传递在调用点击中的上下文中的参数来调用onDeleteHandler
将指的是从它被调用文意,除非你绑定onDeleteHandler
使用箭头功能或在构造函数中
整个问题似乎归结为func
和func()
和() => func()
之间的区别。 它与React无关。
如果我有一个功能
function func() {
console.log(42);
}
然后我可以通过func
引用函数对象本身。 如果我需要将函数传递给另一个函数 ,例如setTimeout
,这很有用:
setTimeout(func, 1000); // calls func after 1000ms
setTimeout
需要一个可以在提供的超时后调用的函数。
类似地,在React中, click
, change
等都是期望传递事件发生时调用的函数的道具。
另一方面, func()
调用该函数 。 如果您确实需要在那时调用函数,则需要执行此操作。 这意味着,如果我这样做
setTimeout(func(), 1000);
然后我先调用func
并将其返回值传递给setTimeout
(即我现在调用func
, setTimeout
以后不调用它)。 所以这通常是不正确的, 除非 func
返回一个函数本身,它实际上是我想传递给另一个函数的返回值。
() => func()
只是一个只调用func
的新函数。 对于所有的目的和目的,它等同于func
:
function func() { console.log(42); } const anotherFunc = () => func(); func(); anotherFunc();
当然,如果func
需要一个参数,那么我必须在将它包装到另一个函数时传递它,这就是x => func(x)
所做的。
另一部分是如何将函数分配给对象属性和this
工作。 简而言之, this
指的是(非箭头)函数内部取决于函数的调用方式 。 干
this.foo();
// or
var bar = this.foo;
bar();
产生两个不同的结果,因为this.foo()
和bar()
是调用函数的两种不同方式。 有关更多信息,请参阅如何在回调中访问正确的`this`?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.