Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
50
rated 0 times [  55] [ 5]  / answers: 1 / hits: 16932  / 6 Years ago, fri, may 11, 2018, 12:00:00

So i'm reading a book on React which said I have to bind my methods like



this.onClickMe = this.onClickMe.bind(this);


but it looks to work just fine without using the above code



class ExplainBindingsComponent extends Component {
onClickMe() {
console.log(this);
}
render() {
return (
<button
onClick={ () => { this.onClickMe() } }
type=button
>
Click Me
</button>
);
}
}


but it's saying I should do something like this,



class ExplainBindingsComponent extends Component {
constructor() {
super();
this.onClickMe = this.onClickMe.bind(this);
}
onClickMe() {
console.log(this);
}
render() {
return (
<button
onClick={this.onClickMe}
type=button
>
Click Me
</button>
);
}
}


is this.onClickMe = this.onClickMe.bind(this); still something I have to do? and if so what does it do vs my above example


More From » reactjs

 Answers
10

There are multiple ways to bind your function to the lexical context of the React class,




  • one such method is to bind it in the constructor,


  • other method is to use class fields as arrow functions, and


  • the third way to bind in the render using .bind or arrow,



Each of these can be used, however its best to avoid binding in the render since a new function is returned on each render



Using class field as arrow function.



class ExplainBindingsComponent extends Component {
onClickMe = () => {
console.log(this);
}
render() {
return (
<button
onClick={ this.onClickMe }
type=button
>
Click Me
</button>
);
}
}


Binding in render



onClick={() => this.onClickMe() }


or



onClick={this.onClick.bind(this)}

[#54456] Tuesday, May 8, 2018, 6 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
bryonk

Total Points: 161
Total Questions: 116
Total Answers: 107

Location: Albania
Member since Sun, Nov 22, 2020
4 Years ago
bryonk questions
;