I was working on a react.js app and I initially used the arrow function which worked, but then just out of curiosity I decided to try the normal function and the normal function didn't work. I think that they both should output the same thing, what is going wrong?
handleChange = event => this.setState({init: event.target.value})
handleChange(event){
this.setState({init: event.target.value})
}
Arrow functions and normal function are not equivalent.
Here is the difference:
Arrow function do not have their own binding of this
, so your this.setState
refer to the YourClass.setState
.
Using normal function, you need to bind it to the class to obtain Class's this
reference. So when you call this.setState
actually it refer to YourFunction.setState()
.
Sample Code
class FancyComponent extends Component {
handleChange(event) {
this.setState({ event }) // `this` is instance of handleChange
}
handleChange = (event) => {
this.setState({ event }) // `this` is instance of FancyComponent
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With