下面我将以示例形式列出问题。我理解正常函数和this上下文中的绑定,但箭头函数以及我看到的它们的使用/声明方式令人困惑。
请不要只是参考重复内容,因为我找到的教程答案相互矛盾,使我感到困惑,所以要寻求简单理解的真相来源。与以下问题和示例相关的答案将有助于更好地理解。
1-我见过一些教程的示例,说箭头函数的“this”值将继承自全局/窗口范围,但我也见过一些教程说它将从类上下文继承“this”-哪个是正确的?如果您能解释一下就太好了。
class MyClass {
value = 'Hello World!'
clickHandler = () => { console.log(this.value) };
}
2 - 我有两个问题:
i - 为什么语法是clickHandler = () =>而不是clickHandler () =>?
我问这个问题是因为我读过类方法可以用'functionName () {}'来定义,那么为什么箭头函数将方法名视为变量?
ii - 在下面的代码中,this的值是什么?与问题1一样,这个this是指窗口对象还是类?
class Foo extends React.Component {
constructor() {
}
clickhandler = () => {
console.log("you clicked me!!")
}
render() {
return(
<div>
<button onClick={this.clickhandler}> // => CALLBACK
3- 在这里,我看到事件处理程序是一个内联函数,但是看起来它会因为结尾处的 () 被调用,就像在下面的代码段中一样,有时你会看到只给出函数名而没有括号,它们也应该在那里吗?
class MyComponent extends React.Component {
showValue() {
console.log(this.props.value);
}
render() {
return (
<button onClick={() => this.showValue()}>Do Something</button>
);
}
}
-------------------------------------------
showValue() {
console.log(this.props.value);
}
render() {
return (
<button onClick={this.showValue}>Do Something</button>
);
}