
this in React is a reference to the current component. Usually this in React is bound to its built-in methods so that when you want to update state or use an event handler on a form, you could do something like this:
<input type="text" ref={this.someInput} required placeholder="This is a Method" defaultValue={getSomeMethod()}/>
where this.someInput is passing state to whichever React component you are rendering.
Unfortunately, though, React doesn’t auto-bind this to custom methods. This means if I wanted to manipulate the DOM by getting some input, which you can’t do as you can with normal JavaScript, I would create a ref to do whatever DOM tinkering I wanted.
But because React doesn’t auto-bind this, the following code would output undefined when logged:
someInput = React.createRef();
renderSomeInput (event) {
event.preventDefault();
const someFunction = this.someInput.value.value;
console.log(this);
}
In order to avoid this, we could use the constructor function in order to initialize or get the state we want:
class SomeCompenent extends React.Component {
constructor() {
super();
this.renderSomeInput.bind(this);
}
}
While this is a decent way to initialize state, what if you wanted to bind several custom methods in one component? It would get pretty messy…
class SomeCompenent extends React.Component {
constructor() {
super();
this.renderSomeInput.bind(this);
this.renderSomeInput.bind(this);
this.renderSomeInput.bind(this);
this.renderSomeInput.bind(this);
}
}
You get the idea.
Instead, we can bind this to custom React methods by declaring a method and assigning it to an arrow function:
class SomeCompenent extends React.Component {
someInput = React.createRef();
renderSomeInput = (event) => {
event.preventDefault();
const someFunction = this.someInput.value.value;
console.log(this);
}
}
which will allow us to bind the value of this to the SomeComponent component.

