Ich habe gerade angefangen, React und JavaScript zu lernen.
Während durch das Tutorial gehe, habe ich zu diesem Beispielcode einer Komponente, die eine Toggle-Button erstellt:Warum eine Funktion erfordert eine Bindung und die andere nicht?
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = {isToggleOn: true};
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(prevState => ({
isToggleOn: !prevState.isToggleOn
}));
}
render() {
return (
<button onClick={this.handleClick}>
{this.state.isToggleOn ? 'ON' : 'OFF'}
</button>
);
}
}
So wie ich es sehe, beide handleClick
und render
Funktionen this
die Klasse der verwenden Objekt, das ist außerhalb ihrer Reichweite (richtig?).
Also warum muss ich nur in handleClick
binden?
Ich habe nie reagiert, aber meine Vermutung ist, dass der 'onClick' Funktionsaufruf das' this' Schlüsselwort durch das 'window' Objekt oder etwas ähnliches ersetzt. Dies geschieht tatsächlich mit der Standardmethode 'addEventListener', die den Callback mit' this' = 'window' aufruft. Wahrscheinlich weil "handeClick" vom "Fenster" aufgerufen wird, muss das 'this' Schlüsselwort gebunden werden, so dass es nicht von' window' überschrieben wird oder wer auch immer die click Funktion aufruft. – Cristy