Câu hỏi phỏng vấn Reactjs
Câu hỏi

Why do class methods need to be bound to a class instance?

Câu trả lời

Class methods in React need to be bound to a class instance to ensure that the this keyword within the method refers to the class instance from which it is called, rather than the context in which the method is invoked. This is necessary because in JavaScript, the value of this is determined by how a function is called, not where it is defined.

When a class method is defined using the traditional function syntax, it does not automatically bind this to the instance of the class. If such a method is passed as a callback, for example, as an event handler in React, this will not refer to the component instance, leading to errors when the method tries to access the component's properties or state.

To illustrate, consider a class component with a method handleClick that is meant to modify the component's state:

class Component extends React.Component {
  constructor(props) {
    super(props);
    this.state = { clicked: false };
    this.handleClick = this.handleClick.bind(this); // Binding the method
  }

  handleClick() {
    this.setState({ clicked: true });
  }

  render() {
    return <button onClick={this.handleClick}>Click me</button>;
  }
}

In the constructor, this.handleClick is explicitly bound to this (the component instance) using .bind(this). This ensures that when handleClick is called as a result of the button click, this inside handleClick will correctly refer to the component instance, allowing this.setState to be called without errors[1][2].

If handleClick were not bound in the constructor, and was instead passed directly as onClick={this.handleClick}, it would lose its binding to the component instance. When the button is clicked, this insid...

middle

middle

Gợi ý câu hỏi phỏng vấn

middle

What would be the common mistake of function being called every time the component renders?

middle

What is prop drilling and how can you avoid it?

middle

What's the difference between an Element and a Component in React?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào