>  기사  >  웹 프론트엔드  >  React에서 함수와 이벤트 핸들러를 바인딩해야 하는 이유와 시기는 무엇입니까?

React에서 함수와 이벤트 핸들러를 바인딩해야 하는 이유와 시기는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-27 02:35:30720검색

 Why and When Should We Bind Functions and Event Handlers in React?

React에서 함수와 이벤트 핸들러를 바인딩해야 하는 이유와 시기는 무엇입니까?

React에서 클래스 메서드의 컨텍스트는 기본적으로 바인딩되지 않습니다. 이러한 메서드 내에서 구성 요소의 상태 또는 props에 액세스할 때 해당 컨텍스트를 바인딩해야 합니다.

함수 바인딩 옵션

함수를 바인딩하는 방법에는 여러 가지가 있습니다.

1. 생성자 바인딩:

class SomeClass extends Component {
  constructor() {
    super();
    this.someEventHandler = this.someEventHandler.bind(this);
  }

  someEventHandler(event) {}
}

2. 굵은 화살표 기능:

class SomeClass extends Component {
  someEventHandler = (event) => {
  };
}

3. 인라인 람다 함수 바인딩:

onChange={(event) => this.someEventHandler(event)}

4. .bind() 메소드 바인딩:

onChange={this.someEventHandler.bind(this)}

이벤트 핸들러 바인딩 옵션

1. 인라인 람다 함수 바인딩:

onChange={(event) => this.someEventHandler(event)}

2. .bind() 메서드 바인딩:

onChange={this.someEventHandler.bind(this)}

바인딩 방법 선택

적절한 바인딩 방법은 구성 요소의 구조와 필요한 기능에 따라 다릅니다.

사전 바인딩(생성자 바인딩 또는 Fat Arrow 함수):

  • 함수가 구성 요소의 상태 또는 props에 액세스해야 할 때 사용합니다.

런타임 바인딩(인라인 Lambda 함수 바인딩 또는 .bind() 메서드):

  • 함수가 구성 요소의 상태나 소품에 액세스하지 않을 때 사용합니다.
  • 추가 매개변수를 허용합니다.

추가 매개변수 전달:

  • 사전 바인딩의 경우 매개변수를 생성자에서 함수 인수로 전달하거나 fat을 사용합니다. 추가 매개변수가 있는 화살표 함수.
  • 런타임 바인딩의 경우 추가 매개변수가 있는 인라인 람다 함수 또는 .bind()를 사용하세요.

사용 예

제공된 코드에서 snippet:

render() {
  return <input onChange={this.someEventHandler.bind(this)} />;
}

이것은 someEventHandler의 컨텍스트를 구성 요소 인스턴스에 바인딩하는 .bind() 메서드를 사용하는 런타임 바인딩입니다.

render() {
  return ;
}

이것은 .bind() 메서드를 사용하는 런타임 바인딩입니다. someEventHandler의 컨텍스트를 구성 요소 인스턴스에 바인딩하는 인라인 람다 함수.

render() {
  return <input onChange={this.someEventHandler} />;
}

이는 추가 매개변수가 없는 런타임 바인딩입니다. 하지만 올바른 컨텍스트가 유지되도록 하려면 생성자에서 someEventHandler 함수를 미리 바인딩하거나 굵은 화살표 함수를 사용하는 것이 좋습니다.

위 내용은 React에서 함수와 이벤트 핸들러를 바인딩해야 하는 이유와 시기는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.