>웹 프론트엔드 >JS 튜토리얼 >React Render 메서드에서 인라인 화살표 함수를 피해야 하는 이유는 무엇입니까?

React Render 메서드에서 인라인 화살표 함수를 피해야 하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-15 04:34:02253검색

Why Should You Avoid Inline Arrow Functions in React Render Methods?

렌더링 메소드에서 인라인 화살표 함수 피하기

this._handleChange.bind(this)와 같은 인라인 화살표 함수는 피하는 것이 좋습니다. React 컴포넌트의 render 메소드.

이유:

다시 렌더링하는 동안 React는 이전 메서드를 재사용하는 대신 새 메서드를 생성합니다. 이는 불필요한 함수 생성 및 메모리 할당을 유발하여 성능에 부정적인 영향을 미칠 수 있습니다.

대안:

렌더링 메서드 내에서 화살표 함수 바인딩을 우회하는 방법에는 여러 가지가 있습니다.

1. 생성자 바인딩:

  • 생성자에서 메서드 바인딩: this._handleChange = this._handleChange.bind(this);
  • 예:

    class MyClass extends React.Component {
       constructor(props) {
          super(props);
          this._handleChange = this._handleChange.bind(this);
       }
    
       _handleChange() {
          // ...
       }
    
       render() {
          return <input onChange={this._handleChange} />;
       }
    }

2. 속성 초기화 구문:

  • 속성 초기화 구문을 사용하여 메서드를 정의합니다: _handleChange = () => { ... };
  • 예:

    class MyClass extends React.Component {
       _handleChange = () => {
          // ...
       };
    
       render() {
          return <input onChange={this._handleChange} />;
       }
    }

3. 콜백 함수를 사용한 이벤트 처리:

  • 필요한 인수를 받는 별도의 콜백 함수 만들기:
  • 예:

    class MyClass extends React.Component {
       handleDeleteTodo = (todo) => {
          // ...
       };
    
       render() {
          return todos.map((todo) => (
             <div key={todo}>
                <input onChange={this.handleDeleteTodo.bind(this, todo)}>
                {todo}
             </div>
          ));
       }
    }

4. 구성 요소 범위 화살표 함수:

  • 렌더링 메서드 외부이지만 구성 요소 클래스 범위 내에서 화살표 함수를 선언합니다.
  • 예:

    class MyClass extends React.Component {
        _handleDeleteTodo = (todo) => {
           // ...
        };
    
        render() {
           return todos.map((todo) => (
              <div key={todo} onClick={this._handleDeleteTodo.bind(this, todo)}>
                 {todo}
              </div>
           ));
        }
    }

5. 외부 이벤트 핸들러:

  • 렌더링 메서드 내 바인딩을 피하기 위해 이벤트 처리 논리를 외부 구성 요소나 도우미 함수로 이동합니다.
  • 예:

    const handleDeleteTodo = (todo) => {
       // ...
    };
    
    class MyClass extends React.Component {
       render() {
          return todos.map((todo) => (
             <MyComponent todo={todo} onDelete={handleDeleteTodo} />
          ));
       }
    }
    
    class MyComponent extends React.Component {
       render() {
          return <div onClick={this.props.onDelete.bind(this, this.props.todo)}>{this.props.todo}</div>;
       }
    }

이러한 대안은 성능을 저하하거나 불필요한 함수 바인딩을 도입하지 않고 React 구성 요소 내에서 이벤트를 처리하는 효율적인 방법을 제공합니다.

위 내용은 React Render 메서드에서 인라인 화살표 함수를 피해야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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